繁体   English   中英

没有模型属性的Rails form_for和text_field

[英]Rails form_for and text_field without model attribute

我正在写一个表格供用户注册产品。 我已经有class User has_many :productsclass 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM