active resource, iki farklı raişls uygulamasının model üzerinden veri alışverişini sağlamak için kullnaılan gemdir.
farkılı portta calısan iki uygulamamız olsun:
A uygulaması 3000 portunda(provider),
B uygulaması 2000 portunda (client)
A uygulaması veriyi paylaşan(provider), B uygulaması veriyi kullanan(client) uygulamalardır.
A uygulaması
Post modelimizi scaffold ile oluşturalım(sonrasında rake db:migrate), Controller sayfamıza giden verileri xml olarak gönderelim
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all
respond_to do |format|
format.html #index.html.erb
format.xml {render :xml=> @posts}
end
end
def show
@post=Post.find(params[:id])
respond_to do |format|
format.html #show.html.erb
format.xml {render :xml=> @post}
end
end
def new
@post = Post.new
respond_to do |format|
format.html #new.html.erb
format.xml {render :xml=> @post}
end
end
def edit
@post=Post.find(params[:id])
respond_to do |format|
format.html #show.html.erb
format.xml {render :xml=> @post}
end
end
def create
@post = Post.new(post_params)
@post.save
redirect_to posts_path
end
def update
@post.update(post_params)
redirect_to posts_path
end
def destroy
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' }
format.json { head :no_content }
format.xml {render :xml=> @post}
end
end
private
def set_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :context)
end
end
B uygulaması
gemfile:
gem 'activeresource', require: 'active_resource'
post.rb modeli oluşturup aşağıdaki şekilde düzenleyelim
class Post < ActiveResource::Base
self.site="http://localhost:3000"
self.format = :xml
end
posts_controller.rb
class PostsController < ActionController::Base
before_action :set_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all.elements
end
def show
@post=Post.find(params[:id])
end
def new
@post = Post.new(:title=>'', :context=>'')
end
def edit
@post=Post.find(params[:id])
end
def create
binding.pry
Post.create(post_params)
redirect_to root_path
end
def update
@post=Post.find(params[:id])
@post.update(post_params)
redirect_to root_path
end
def delete
Post.find(params[:id].to_i).destroy
redirect_to root_path
end
private
def set_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :context)
end
end
config/routes.rb
resources :posts do
get :delete, on: :member
end
A uygulamasında veritabanında tutulan post modelindeki verileri B uygulamasındaki model üzerinden listeleyebilir, gosterebilir ve silebiliriz, fakat create, update işlemi için rails versiyonunuzun 4 un altında olması gerekiyor . rails 4 ve üzeri için actiresource kaldırıldığı içn hata verir.
A uygulamasından veri ekleyelim listeletelim:
B uygulamasında çekelim: