Ruby on rails Rails中的RESTful habtm关系
假设我有两个Ruby on rails Rails中的RESTful habtm关系,ruby-on-rails,rest,has-and-belongs-to-many,Ruby On Rails,Rest,Has And Belongs To Many,假设我有两个:has和\u属于\u许多由简单索引表连接的模型。这就是my routes.rb的外观: match "foo/:id" => "foos#create", :via => :post match "foo/:id" => "foos#update", :via => :put match "foo/:id" => "foos#read", :via => :get match "foo/:id" => "foos#delete", :via
:has和\u属于\u许多由简单索引表连接的模型。这就是my routes.rb的外观:
match "foo/:id" => "foos#create", :via => :post
match "foo/:id" => "foos#update", :via => :put
match "foo/:id" => "foos#read", :via => :get
match "foo/:id" => "foos#delete", :via => :delete
match "foos/:id/bars" => "foos#add_bar", :via => :post
最后一个路由(有问题的路由)映射到foo_controller.rb中的add_bar
方法,该方法需要一个条的JSON表示:
def add_bar
@bar = Bar.find(params[:bar][:id])
if @bar.nil?
@bar = Bar.create(params[:bar])
validation_error(@bar.errors) unless @bar.valid?
@bar.save!
end
@foo.bars << @bar
@foo.save!
respond(ResponseCode::OK, @bar)
end
def添加栏
@bar=bar.find(参数[:bar][:id])
如果@bar.nil?
@bar=bar.create(参数[:bar])
验证错误(@bar.errors),除非@bar.valid?
@酒吧,救命!
结束
@foo.bar刮除所有这些,然后使用:
resources :foos do
member do
post 'bars', :to => "foos#add_bar", :as => :add_bar_to
end
end
这提供了六个基本的RESTful CRUD路由,以及一个add\u bar\u to\u foo
helper方法。您的foos控制器应该具有show
方法,而不是read
。这是Rails的惯例
要处理添加条
def add_bar
@foo = Foo.find(params[:id]) # find the foo
@bar = @foo.bars.build(params[:bar]) # build new bar through foo
if @bar.save
render :json => @bar # 'OK' response
else
render :json => @bar, :status => :unprocessable_entity # failure response
end
end
划掉所有这些,然后使用:
resources :foos do
member do
post 'bars', :to => "foos#add_bar", :as => :add_bar_to
end
end
这提供了六个基本的RESTful CRUD路由,以及一个add\u bar\u to\u foo
helper方法。您的foos控制器应该具有show
方法,而不是read
。这是Rails的惯例
要处理添加条
def add_bar
@foo = Foo.find(params[:id]) # find the foo
@bar = @foo.bars.build(params[:bar]) # build new bar through foo
if @bar.save
render :json => @bar # 'OK' response
else
render :json => @bar, :status => :unprocessable_entity # failure response
end
end