1

我正在使用 form_for 循环将数据提交给我的控制器的 create 方法。在 form_for 中,我有几个 text_fields 与表上的任何字段都没有关联。它们本质上是自由文本字段,我想将数据放入其中并用于 create 方法中的其他逻辑。

当我提交表单时,创建的第一行被击中:

@user = User.new(params[:user])

发生以下错误(:test1 是我与模型无关的表单字段):

Can't mass-assign protected attributes: test1

我意识到这是因为我发送的文本字段与模型无关。我尝试了各种奇怪的语法,例如:

User.new(params.require(:user).except(:test1))User.new(params[:user].except(:test1))无济于事。

我在网上找到了几个来源,说明您可以使用 except 或 delete 方法,但我似乎无法让它工作,尤其是在 User.new() 中。

我也在新版本之外尝试过:

params.delete(:test1)
@user = User.new(params[:xref_ability])

我还希望最终能够在创建时读取附加属性,所以我认为 except() 或 delete() 不会解决我的所有问题(如果它确实有效)。因此,我在控制器类和模型类上尝试了 attr_accessor :test1,希望它会给方法读取属性的权限,但没有成功。

我还尝试将其添加到我的模型上的 attr_accessible 中,这会导致错误:

unknown attribute: test1

还有其他建议吗?

4

3 回答 3

1

您可能需要attr_accessible :test1在您的用户模型上使用,试一试。

于 2013-09-06T21:07:51.107 回答
1

也许尝试使用虚拟属性?如果它们不映射到数据库中的字段,则使用它们是有意义的。

RB 对此主题有很好的 railscast:http ://railscasts.com/episodes/16-virtual-attributes-revised

于 2013-09-06T22:47:56.160 回答
0

您收到未知属性错误,因为它在数据库中不存在。

您必须在数据库中创建 test1 (将其添加到迁移中......)或将其添加到您的模型中:

attr_accessor :test1

这样,您将拥有对象中的值,但它不会存储在数据库中。如果您需要存储它,请将其添加到数据库并使用 attr_accessible 正如@Miguelgraz 之前告诉您的那样。

于 2013-09-06T22:47:10.510 回答