【问题标题】:Rails How to pass params from controller to after_save inside modelRails如何将参数从控制器传递到模型内部的after_save
【发布时间】:2011-01-18 14:28:13
【问题描述】:

我有一个 Rfq 控制器,我正在创建新的或更新现有的 Rfq,当我创建或更新对象时保存,我想要的是因为我有多个引号参数我想用参数中的引号更新 line_items 表保存 Rfqs 后,quotes_price 列中的 [:quotes]

我知道它令人困惑,但谁是 ror-ish 应该得到一些提示 wat 我想问。

【问题讨论】:

  • 你可以直接从 after_save 块访问params[:quotes]
  • 如何举例说明?
  • params 不能直接从模型访问,我不认为。
  • 我已经使用实例方法来传递参数,但是有一种方法可以传递 after_save 块。

标签: html ruby-on-rails ruby


【解决方案1】:

如果您尝试在模型中使用 params 哈希,则违反了 MVC 原则。该模型应该独立于参数。如果您尝试执行以下操作:

# controller
Model.foo

# model
def foo
  params[:bar].reverse!
end

您应该改为:

# controller
Model.foo(params[:bar])

# model
def foo(foobar)
  foobar.reverse!
end

【讨论】:

    【解决方案2】:

    老实说,如果它处理params,将这种类型的逻辑放在控制器中可能是个好主意,以免混淆模型和控制器的职责。

    即在控制器中:

    if @foo.save
      # Update line_items using params[:quotes]
    end

    【讨论】:

      【解决方案3】:

      我认为您希望能够拥有 1 个表单来保存主对象和所有子对象。如果没有,请忽略。

      在 Rails 中,这被命名为“nested_attributes”

      您将把它添加到您的模型中:

      accepts_nested_attributes_for :quotes
      # assuming you have 
      has_many :quotes
      

      然后在您的表单视图中:

      <% form.fields_for :quotes do |child_form| %>
        <%= child_form.text_field :name %>
      <% end %>
      

      在 Ryan 的博客上查看此内容:Nested Attributes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多