単純なhas_manybelongs_to関係があり、belongs_toモデルのビューの親オブジェクトを含めたいのですが、ある程度の成功を収めていますが、より適切に機能させたいと考えています。
class Submission < ActiveRecord::Base
belongs_to :user
belongs_to :contest
end
class Contest < ActiveRecord::Base
belongs_to :user
has_many :submissions, :dependent => :destroy
end
うまくいく場合は、contest_idを次のURLに配置して提出物に渡します。
<%= link_to 'Submit Contest Entry', new_submission_path(:contest_id => @contest.id),
:class => 'btn btn-primary btn-large mleft10' %>
そのため、hidden_fieldと組み合わせると:
<%= f.hidden_field :contest_id %>
そして、コントローラーのfind_contestメソッド(before_filterで呼び出されます):
def find_contest
#the next line is giving the error (line 76)
@contest = Contest.find(params[:submission][:contest_id])
end
送信/新規で機能するようにしますが、showやindexでアクセスする場合のように、複数のページで機能する検索結果をコントローラーに追加するにはどうすればよいですか。現在、エラーが発生します:
Started GET "/submissions?contest_id=5" for 127.0.0.1 at 2012-12-01 16:01:45 -0800
Processing by SubmissionsController#index as HTML
Parameters: {"contest_id"=>"5"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 ORDER BY users.created_at DESC LIMIT 1
Completed 500 Internal Server Error in 37ms
NoMethodError (undefined method `[]' for nil:NilClass):
app/controllers/submissions_controller.rb:76:in `find_contest'
[編集]提出物の表示アクションの追加:
before_filter :find_contest, :except => [:index, :show, :edit, :update, :destroy]
def find_contest
@contest = Contest.find(params[:submission][:contest_id])
end
def show
contest_id = @submission.contest_id
@submission = @commentable = Submission.find(params[:id])
@comments = @commentable.comments.order(:created_at).reverse
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @submission }
end
end