![](/img/trans.png)
[英]Rails form_for, having a text_field without a label (without using CSS)
[英]Rails form_for and text_field without model attribute
我正在写一个表格供用户注册产品。 我已经有class User has_many :products
和class Product belongs_to :user; attr_accessible :serial_number
class Product belongs_to :user; attr_accessible :serial_number
。 因此,想法是用户以表格形式输入序列号,然后调用@user.products << Product.find_by_serial_number params[:serial_number]
或类似的名称。
将其作为注册动作添加到UsersController
似乎是明智的:
resources :users do
member do
get 'register'
end
end
我在register.html.erb
具有以下内容:
5: <%= render 'shared/error_messages' %>
6:
7: <%= f.label :serial_number, "Serial number" %>
8: <%= f.text_field :serial_number %>
9:
10: <%= f.submit "Register product" %>
11: <% end %>
这引发了错误:
undefined method `serial_number' for #<User:0x000000060b1d40>
extracted source (around line #8):
...
所以... a)如何停止该错误? b)嗯...按下“提交”按钮后会发生什么? 我假设它将调用update
操作(编辑表单也使用该操作)...我应该更胖些来处理这两种可能性吗? 还是采取新的行动? (如果是这样,我该如何重新路由该表格以指向该表格?)c)错误处理(输入无效的序列号)最好在控制器而不是模型中处理,对吗?
谢谢。
您只能将表单帮助器用于模型的属性。 在这种情况下,您将需要使用完整方法。
= label_tag :serial_number, 'Serial number'
= text_field_tag :serial_number
引发的错误表明User
模型没有方法serial_number
...没有。 该方法实际上是附加到Product
模型的,但是register.html.erb
的形式是User
。 您可以使用嵌套表单来解决此问题。
首先,确保User
可以接受Product
嵌套属性:
# app/models/user.rb
has_many :products
accepts_nested_attributes_for :products
然后,使您的表单成为嵌套表单:
# app/views/users/register.html.erb
<%= form_for(@user) do |f| %>
<%= f.fields_for :products do |e| %>
<%= e.label :serial_number, "Serial number" %>
<%= e.text_field :serial_number %>
<% end %>
<%= f.submit "Register product" %>
<% end %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.