0

Rails アプリケーションに少し問題があります。簡単に言えば、ユーザーがプロフィールを持ち、提出物を持ち、提出物にコメントできるソーシャル ネットワーキング アプリです。

私のルートは次のとおりです。

map.connect '/:username', :controller => 'users', :action => 'show'  
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'

したがって、提出物を表示している場合、URL は次のようになります。

http://www.example.com/users_username/2342

番号はカテゴリの ID 番号です。ここまでは順調ですね。問題が発生するのは、提出物にコメントを提出しようとするときです。各投稿ページには、次のようなコメントを送信するためのフォームがあります。

<% form_for Comment.new do |f| %>  
    <%= f.text_area :message %>  
    <%= f.submit "Submit", :disable_with => 'Submitting...' %>  
<% end %>  

コントローラーは次のようになります。

def create
    submission = Submission.find(params[:id])
    comment = cat.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

コメントを送信しようとするたびに、Rails は次のように返します。

ActiveRecord::RecordNotFound in CommentsController#create Couldn't find Submission without an ID or undefined method `answers' for nil:NilClass  

基本的に、Rails はパラメーターを使用して URL から :id を取得していません。その理由はわかりません。送信ページは URL の各 ID に対して正しく表示されるため、このフォームでそれを取得しない理由がわかりません。IDに明示的に名前を付けると(IE Submission.find(2345))、完全に機能します...何が欠けていますか?私は愚かなだけですか?

私の関係も適切に設定されています。

前もって感謝します。

4

1 に答える 1

3

次のコードは、commentsコントローラーに送信するフォームを生成しています。

<% form_for Comment.new do |f| %> 

提出IDをフォーム内に渡す必要があると思います:

<%=hidden_field_tag(:submission_id, @submission.id)%>

コメント コントローラー内で、その ID を取得する必要があります。

def create
    submission = Submission.find(params[:submission_id])
    comment = submission.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

これで解決するはずですが、2 番目のステップとしてネストされたリソースを実行することをお勧めします。

于 2009-12-10T18:44:12.280 に答える