【问题标题】:1 submit button for 2 models (fields_for) in Rails 2.3.9Rails 2.3.9 中 2 个模型 (fields_for) 的 1 个提交按钮
【发布时间】:2010-11-08 06:56:05
【问题描述】:

我有 2 个模型对应于 2 个单独的数据库表。

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

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

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

这应该用fields_for来完成,但是这2个模型之间没有关系..我看到了..

我怎样才能做到这一点?

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

我希望这很清楚!

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 嗯,我想我明白了(我是菜鸟状态......)我会试一试,看看会发生什么。谢谢~!
    • 用户仍然可以保存重新分配的名称,但由于某种原因,statusupdate 表中没有记录任何内容。关于我可能在这里遗漏的任何想法?好像 StatusUpdate.create 被完全忽略了。
    • 你是用after_save方法还是换控制器?
    • 我试图使用 after_save,但那不起作用我最终使用了控制器路由。非常感谢!!
    • Kevin Sylvestre 就他的问题 (stackoverflow.com/questions/4129917/…) 提出了以下 RailsCast:railscasts.com/episodes/57-create-model-through-text-field 也请查看。
    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多