【问题标题】:Affecting resulting params set from form_for影响从 form_for 设置的结果参数
【发布时间】:2014-02-06 18:03:03
【问题描述】:

这里是 Ruby on Rails 的相对新手。

在我的SomeobjController#new 操作的视图中使用标准的form_for 方法

= form_for @someobj do |f|
    .
    .
    .
  %p.submits
  = f.submit "Submit", :class => "submit"

会生成一个提交param[] 数组,其中包含表单中设置的所有字段的@someobj 哈希,这样

param[someobj] => { "field1" => "val1", "field2" => "val2", ... }

我更愿意为SomeobjController#create 设置一个不同的值,即someobj.to_sparam[someobj] 的结果,这样

param[someobj] => "strvalfromtos"

我怀疑它是相对的,但以防万一,这个 #new 操作的基础模型在数据库中不是持久的(即,Someobj 不是从 ActiveRecord::Base 派生的,尽管 ActiveModel 的某些部分包括在内。)

直到调用#create 之后,我才尝试调整它,但是我想修改从#new 到#create 的提交。我不清楚我是否应该更多地关注form_for 语句或在控制器中做一些特别的事情(我猜form_for 是正确的焦点)。

而且,是的,这整件事对我来说可能有点强迫症,但实际的字段名很长(适合模型),但#create 所需的数据非常少。

假设someobj.to_s已经写好了,有没有相对轻松的方法?

非常感谢, 理查德

【问题讨论】:

  • 你在使用 Rails 4 吗?
  • 你的问题不清楚。你是说你想要改变参数哈希的值? params 散列的目的是从表单中传递数据。您是说要获取表单数据,将其转换为某种字符串,然后提交吗?
  • 对不起,Rails 3.2.16。是的,我想我是这么说的,但你的问题有助于我更好地澄清它。我一直认为它更像是另一个参数,但考虑到这种情况似乎仍然合适。
  • @Beartech,也感谢您的帮助。我很感激你的 cmets。

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


【解决方案1】:

改变

当您提交表单时,您的控制器将收到参数哈希,正如您所说的 (Rails params explained?)

这意味着您可以根据需要更改散列中的任何值:

def create
    #has access to the params hash
    params[:owner][:key] = value
end

由于create 方法接收哈希对象,您必须在此处更改它。但是因为它是一个标准的散列(已经声明过),你应该可以根据需要修改它

添加

如果你想给 params hash 添加值,你可以使用.merge 方法,像这样:

def create
    #has access to the params hash
    params[:key].merge(user_id: current_user.id)
end

【讨论】:

  • 谢谢。我意识到我可以在create 操作中影响它,但想知道我是否可以在它到达create 之前影响它从表单中出来。在与 Beartech 的 cmets 中(在我的 OP 下),他明确表示我真正想做的是汇总表单数据,然后将其作为单个字符串提交。您关于合并到 params 哈希的观点特别有趣。
  • 我不会在表单提交后立即尝试更改参数哈希(违反惯例)。我会在您的控制器中使用before_action :method, only: :create 回调,它应该允许您根据需要修改传递的参数(在调用create 方法之前)
  • 现在说得通了。谢谢!我还意识到我也可以通过放弃form_for 并使用form_tag 和相关标签来用更小的名称替换字段名称并在create 中创建最终对象来简化参数。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2019-01-04
  • 1970-01-01
  • 2016-04-05
  • 2013-07-01
相关资源
最近更新 更多