私はRailsには新しく、if ... else文の外でローカル変数をどのように渡すことができるのか混乱しました。ヘルパーファイルにメソッドを作成するのはこれを行う従来の方法ですが、どうやってこれを行うのかは分かりませんでした。Rails 3でカスタムヘルパーを作成するには?
私はミッションの著者を取得しようとしています。ミッションの作者が存在しない場合、私は親シラバスの作者(ミッションはシラバスに属しています)を使用したいと思います。そして、その著者のユーザー名を印刷したいと思います。私は私が唯一の使命を扱ったとき、これを行うことができたように:
//controller
@mission = Mission.first
if [email protected]?
@author = @mission.author
else
@author = @mission.syllabus.author
end
//view
<%= @author.username %>
が、私は、foreachループを扱ったとき、これを行う方法がわからなかった。
//controller
@mission = Mission.all
//view
<% @mission.each do |mission| %>
..(where do I put the logic of finding author? I can't put it in my controller anymore and it won't pass the @author variable outside the if else statement if I put the logic here in the view)..
<%= @author.username %>
<% end %>
私の無益な試みは、ヘルパーを作成することでした。
def author_getter(mission_id)
@mission = Mission.find(params[:mission_id])
if [email protected]?
@author = @mission.author
return @author
else
@author = @mission.syllabus.author
return @author
end
end
とループ内で以下の
<%= author_getter(mission) %>
を置きます
ただし、これは機能しませんでした。 if ... else文の外で変数を渡す最善の方法は何でしょうか?
ありがとうございました!!!これは今非常に意味をなさない! :) :)私は本当に今私が感じている喜びと感謝をどのように表現することができるのか分かりません!! – kibaekr
1つ以上の質問:私は 'mission.real_author'を使用し、それを '@author = mission.real_author'として保存したい場合は、@author変数をどこで定義しますか?それぞれのループ内でそれをやらなければならないのでしょうか、それとも何らかの形でコントローラーで定義できますか? – kibaekr
@KeithRyu: '@missions'を既に持っているときは、' <%author = mission.real_author%> 'を繰り返し使用したいと思うでしょう。そうすれば' author 'は漏れず、別の場所で問題を引き起こします。 –