假设我有以下模型
模型/用户.rb
class User
has_many :degrees
end
型号/degree.rb
class Degree
attr_accessible :name
belongs_to :user
validates :name, :presence => true
end
Users#show
我想在其中显示用户学位并提供用于创建新学位的表单。
意见/用户/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里面我们有
控制器/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
问题在于在学位验证失败后对render @user.degrees
内部的调用。views/users/show.html.erb
如果我在不提供名称的情况下提交表单,则在调用该方法后度数对象会保留在内存中render
,并将呈现views/degrees/_degree.html.erb
无效对象的部分。此部分调用该name
方法,该方法引发 Nil 错误。
我可以在视图中抛出条件(即,unless degree.name.nil?
),但这对我来说很臭。如果程度对象上的属性增长,该部分将包含太多的条件逻辑。
有什么想法吗?