比方說,我有以下型號Rails的:即集合中的對象渲染後的集合驗證失敗
型號/ user.rb
class User
has_many :degrees
end
型號/ degree.rb
class Degree
attr_accessible :name
belongs_to :user
validates :name, :presence => true
end
以內Users#show
我想顯示用戶學位並提供af orm創建一個新的。
的意見/用戶/ show.html.erb
...
Your current degrees:
<%= render @user.degrees %>
Add a new degree:
<%= form_for Degree.new do |f| %>
<%= f.text_field :name %>
<%= f.submit "Submit" %>
<% end %>
...
的意見/度/ _degree.html.erb
...
<%= degree.name %>
所以裏面degrees_controller.rb我們
controllers/degrees_controller.rb
class DegreesController < ApplicationController
# ...
def create
degree = current_user.degrees.build(params[:degree])
if degree.save
redirect_to # somewhere with a flash message
else
render "users#show"
end
end
end
的問題,這是在內部views/users/show.html.erb
後一定程度未通過驗證調用render @user.degrees
。如果我在未提供名稱的情況下提交表單,則在調用render
方法後,度數對象將保留在內存中,並且會爲無效對象呈現局部對象views/degrees/_degree.html.erb
。這部分調用了name
方法,該方法拋出了Nil錯誤。
我可以在視圖中添加條件(即unless degree.name.nil?
),但是這對我來說很陌生。如果度數對象上的屬性增長,那麼該部分將包含過多的條件邏輯。
有什麼想法?
請添加views/degrees/_degree.html.erb來源和完整的錯誤信息 – Fivell 2013-03-25 15:09:31
這是你可以使用嵌套屬性和fields_for的東西,看看那些。 – Matt 2013-03-25 15:10:19
@Fivell,我添加了一部分_degree.html.erb視圖來說明問題。 @Matt,我想了解嵌套的屬性,但是現在選擇不走這條路。謝謝。 – Feech 2013-03-25 16:20:23