比方说,我有以下型号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