[英]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.