将自定义信息提交给控制器

时间:2011-04-20 00:39:38

标签: ruby-on-rails ruby ruby-on-rails-3

这可能很简单,但我已经尝试过一些东西,却找不到让它工作的方法。

我想使用form_for

中提供的自定义信息更新模型

为了使它更具体,我在MyClass的特定实例的显示页面上,我想将字符串“yay”传递给控制器​​,然后随意输入。也许可以将其作为flash消息传回页面,或者修改内容然后将其存储为MyClass实例的字段。

我可以编写包含没有prbolems的MyClass属性的form_for,但似乎其他字段会抛出错误。

如何编写form_for以便我可以完成上述两种情况之一?

  def update
    @my_class = MyClass.find(params[:id])
    flash[:notice] = "This works" # but what can I write in a form for for it to be a variable that's passed in?
    #rest of the update
  end

3 个答案:

答案 0 :(得分:1)

将表单构建器实例(如f.text_field)单元化的表单帮助程序需要一个有效的模型属性,以便它可以生成相应的id并使用模型中的数据填充该字段。如果您希望表单字段与模型属性不对应,请不要使用标准f.text_field,而是使用:

<%= text_field_tag 'my_custom_tag' %>

应该呈现如下内容:

<input type="text" id="my_custom_tag"></input>

提交表单时,输入的值将显示在params哈希中,密钥为:my_custom_tag。

我希望这会有所帮助。

答案 1 :(得分:0)

您的表单中可能需要一个hidden_​​field:

http://apidock.com/rails/ActionView/Helpers/FormHelper/hidden_field

但是,如果你希望保存某种状态,这似乎就是你想要的,你就永远不会使用它。相反,您将使用会话。原因是客户端可以操纵隐藏字段,因此可以轻松覆盖安全性。

答案 2 :(得分:0)

像Spyros说的那样,一个隐藏的领域会给你这个地方。假设用户可以修改URL,那么只需将attr_accessor :foo添加到模型中即可。

在控制器中,您可以使用bar = params[:foo]访问它,并随意执行。