Ruby on rails rails简单表单字段与模型无关
我有一个绑定到名为“订单”的模型的现有表单,但我想添加新的表单字段,这些字段将捕获信用卡信息,如姓名、抄送号码等,以便在第三方支付网关上处理Ruby on rails rails简单表单字段与模型无关,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,我有一个绑定到名为“订单”的模型的现有表单,但我想添加新的表单字段,这些字段将捕获信用卡信息,如姓名、抄送号码等,以便在第三方支付网关上处理 但由于我不想在数据库中保存CC info,所以在我的order表中没有相应的列。这在提交表单时给了我一个错误,即这些信用卡输入字段不是订单模型的“一部分” 您可以使用attr\u访问器 class Order < ActiveRecord::Base attr_accessor :card_number end 类顺序邀请路径(re
但由于我不想在数据库中保存CC info,所以在我的order表中没有相应的列。这在提交表单时给了我一个错误,即这些信用卡输入字段不是订单模型的“一部分” 您可以使用attr\u访问器
class Order < ActiveRecord::Base
attr_accessor :card_number
end
类顺序
现在,您可以执行Order.first.card_number='54421542122'
或在表单中使用它,或执行任何需要执行的操作
请参见此处了解ruby文档
这里有一个有用的问题
不要把它和属性混淆了 如果我正确理解了您的答案,您想做的事情将在此处的官方wiki页面中解释:。根据Edward的建议,您可以使用与任何实际数据库列不相关的字段,但是如果表单字段与模型无关,则不需要在模型中定义属性 总之,页面中介绍的技巧是定义一个名为“FakeInput”的自定义输入,并按如下方式使用:
<%= simple_form_for @user do |f| %>
<%= f.input :agreement, as: :fake %>
....
此外,如果您只是尝试添加一些内容并将其放入
参数中,但不将其包含在模型的散列中,则可以只使用FormTagHelpers
例如:
<%= simple_form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<% resource.class.invite_key_fields.each do |field| -%>
<%= f.input field %>
<%= hidden_field_tag :object_name, @object.class.name %>
<%= hidden_field_tag :object_id, @object.id %>
<% end -%>
resource\u name,:url=>邀请路径(resource\u name),:html=>{:method=>:post}do | f |%>
处理此问题的最佳方法是使用简单字段\u来处理
,如下所示:
<%= simple_form_for @user do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :email %>
<%= simple_fields_for :other do |o| %>
<%= o.input :change_password, as: :boolean, label: 'I want to change my password' %>
<% end %>
<% end %>
在本例中,我添加了一个名为change\u password
的新字段,它不是底层user
模型的一部分
这是一种很好的方法,因为它允许您使用任何简单的表单输入/包装器作为字段。我不喜欢@baxang的答案,因为它不允许您使用不同类型的输入。这似乎更灵活
请注意,为了让它工作,我必须将:other
传递给的简单字段。只要没有同名的模型,就可以传递任何字符串/符号
也就是说,不幸的是,我无法通过:user
,因为simple_form会尝试实例化一个用户模型,我们会再次收到相同的错误消息…我发现了一个非常简单(而且有些奇怪)的解决方法
只需添加input\uhtml
选项,并在其中添加任何值
键即可。例如:
= simple_form_for @user do |f|
= f.input :whatever, input_html: {value: ''}
测试版本:3.2.1、3.5.1的simple_我有一个后续问题,在我提交表单后,在控制器上,如何在调用“model.save”时“取消设置”那些CC相关字段,因为它可能会引发错误?您可以使用参数,除了(:card_number)
在您的控制器中。此问题的可能重复项不是上述链接问题的重复项。这是关于没有连接到模型的整个表单。这是关于选择未连接到表单模型的字段。这会给您带来PCI合规性方面的各种问题,这是非常危险的!!虽然您没有将CC信息保存到数据库中,但如果您将其提交到服务器,所有详细信息都将在您的日志中,如果任何人都可以访问您的日志,则他们可以访问未加密的客户端CC信息。您应该完全避免将此数据提交到服务器。如果确实需要,请查看客户端加密()。否则,请使用直接投递表单或第三方插入工具。祝你好运美好的我从未注意到这一点。您可能必须重新启动/重新加载您的web服务器才能获取此信息。由于某些原因,它不再工作<代码>未定义的方法合并#
@Trein您使用的Rails/SimpleForm版本是什么?@baxang我使用的是v3.0.2。它对rc版本有效吗?很遗憾,我不能在这个项目上使用rc版本(策略…),最简单的答案是最好的。对我有用。
= simple_form_for @user do |f|
= f.input :whatever, input_html: {value: ''}