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