1在Rails 2.3.9中为2个模型(fields_for)提交按钮

时间:2010-11-08 06:56:05

标签: ruby-on-rails ruby fields-for

我有2个模型,分别对应2个独立的数据库表。

模型1:用户ex的状态更新。 (评论:你好|用户名:marc) 模型2:用户在餐馆吃的餐馆名称(餐厅:肯德基|用户名:marc)

我有1个视图,显示通过Google搜索生成的餐馆网站。还为每个列出的餐馆生成隐藏的表格。当用户按下“我在这里吃饭!”按钮,它将这个隐藏的表格提交给餐厅控制器,然后是模型2,记录用户名和他吃的餐馆。

我想用“我在这吃饭!”按钮也可以将餐馆名称的状态更新发布到模型1。

这应该用fields_for完成,但是这两个模型彼此没有关系..我看到..

我怎样才能实现这一目标?

这是我的馅饼:http://www.pastie.org/1280923

我希望那清楚!

1 个答案:

答案 0 :(得分:1)

没有“将表单提交给模型”这样的事情。表格总是提交给您的控制器。

考虑到这一点,您可以覆盖控制器上的createupdate方法来执行您想要的任何操作。

您的控制器将如下所示:

class RestaurantsController < ApplicationController
  def update
    @restaurant = Restaurant.find(params[:id])
    unless @restaurant.update_attributes(params[:restaurant])
      # error while saving: warn user, etc
      return # stops execution
    end

    # restaurant was saved ok, do the additional things you want
    StatusUpdate.create :user_id => @restaurant.user_id, 
                        :comment => "I just ate @ #{@restaurant.name}"

    flash[:notice] = 'Restaurant was successfully updated, and a status update was added.'
    redirect_to :action => 'list'
  end
end

但是,如果你的场景看起来很简单,你也可以使用模型上的ActiveRecord回调来解决这个问题:

class Restaurant < ActiveRecord::Base
  after_save :append_status_update

  private

  def append_status_update
    StatusUpdate.create :user_id => self.user_id, 
                        :comment => "I just ate @ #{self.name}"
  end
end