0

我有一个变量,我想用 Rails 中的表单传递。

该变量不方便,因为它不是模型的一部分。我真的不想在数据库中创建一个列,这样我就可以传递变量。

当我尝试使用无害的东西传递变量时:

<input type="hidden" id="blah" value=<%= "#{@blah}" %> />

隐藏字段在源代码中正确出现,但不会与 params 散列一起传递。当我使用诸如 rails 之类的东西对其进行正确编码时,id="review_blah"假定它是审查模型的一部分,并且因为它不是模型的一部分而生气。

不是有什么办法吗??在这些情况下,有什么方法可以轻松传递变量,而无需重建模型?

谢谢

4

5 回答 5

2

在模型中

attr_accessible :blah
于 2012-10-16T10:26:12.490 回答
2

您需要attribute_accessor为虚拟属性定义一个,并且需要将其添加到attr_accessible列表中,以便可以在表单中使用它。像这样:

attr_accessor :blah

这使得blahblah=方法可用,您可以使用它们来处理传入的数据。

def blah=(data)
  #do sth. with the submited data here
end

在这种情况下,您可以访问在“blah”字段中输入的数据作为局部变量“data”。

然后你需要使它成为常规形式的一部分:

<%= f.hidden_field :blah, :value => <Your value here> %>

因此,您需要做的最后一件事是将字段添加到attr_accessible列表中。

attr_accessible :blah,....

Otherwise the request would fail because of mass assignment protection.

于 2012-10-16T12:08:09.307 回答
0

虽然它非常难看,但您可以执行以下操作

<input name='x' type="hidden" id="blah" value=<%= "#{@blah}" %> />

在你的控制器中

@model.save
  Model.update_all({:my_attribute => params['x']}, {:id => @model.id})
于 2012-10-16T10:37:46.223 回答
0

您需要设置我认为的输入参数的名称。否则它不会包含在 Rails 参数哈希中。

<input type="hidden" id="blah" value=<%= "#{@blah}" %> name="blah"/>
于 2012-10-16T10:39:22.523 回答
0
class ModelName
  attr_accessor :blah
end

@model = ModelName.new
@model.blah = "blah blah"
@model.blah  #will return "blah blah"

您不需要在表中有列。在这里检查 这样你就可以拥有

=form_for @model do |f|
  =f.hidden_field :blah

这将传递散列blah中的对象。params

于 2012-10-16T10:56:26.910 回答