影响由form_for设置的结果参数

时间:2014-02-06 00:54:59

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

Ruby on Rails的相对新手。

在我的form_for操作

视图中使用标准SomeobjController#new方法
= form_for @someobj do |f|
    .
    .
    .
  %p.submits
  = f.submit "Submit", :class => "submit"

生成提交param[]数组,其中包含表单中设置的所有字段的@someobj哈希值,以便

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

我希望为someobj.to_s使用param[someobj]SomeobjController#create的结果使用不同的值,以便

param[someobj] => "strvalfromtos"

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

在调用#create之后,我还没有运气试图调整它,但是从#new到#create的提交要我修改。我不清楚我是否应该更多地关注form_for声明或在控制器中做一些特别的事情(我猜测form_for是正确的焦点)。< / p>

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

假设已经写过someobj.to_s,是否有相对无痛的方法呢?

非常感谢, 理查德

1 个答案:

答案 0 :(得分:0)

更改

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

这意味着您可以更改您希望的哈希值中的任何值:

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

create方法接收到哈希对象时,您必须在此处更改它。但是因为它是标准的哈希(已经声明),你应该能够根据需要改变它

添加

如果要为params散列添加值,可以使用.merge方法,如下所示:

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