私が次のモデルを持っているとしましょう
models / 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
ユーザーの学位を表示し、新しい学位を作成するためのフォームを提供したいと思います。
views / users / 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 %>
...
views /degrees / _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
これに関する問題は、学位が検証に失敗した後のrender @user.degrees
内部への呼び出しにあります。名前を指定せずにフォームを送信すると、メソッドが呼び出されviews/users/show.html.erb
た後も度オブジェクトがメモリに保持され、無効なオブジェクトのパーシャルがレンダリングされます。この部分はメソッドを呼び出し、Nilエラーをスローします。render
views/degrees/_degree.html.erb
name
ビュー(つまりunless degree.name.nil?
)に条件文を投げることはできますが、これは私にはにおいがします。次数オブジェクトの属性が大きくなると、そのパーシャルには条件付きロジックが多すぎます。
何かご意見は?