簡體   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