[英]rails routes params find for a form
我的rails應用程序遇到了一些麻煩。 簡而言之,它是一個社交網絡應用程序,用戶可以在其中擁有個人資料,提交內容並可以對提交內容發表評論。
我的路線如下:
map.connect '/:username', :controller => 'users', :action => 'show'
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'
因此,當他們查看提交內容時,URL類似於:
該數字是類別的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不會使用params從URL中提取:id,我也不知道為什么。 提交頁面針對URL中的每個ID正確顯示,所以我不明白為什么它不為此表單提取它。 如果我明確命名ID(IE Submission.find(2345)),它就可以完美運行...所以我缺少了什么? 我只是愚蠢嗎?
我的人際關系也正確建立。
提前致謝。
以下代碼段生成一個表單,該表單提交給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
那應該可以解決,但是我建議做嵌套資源作為第二步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.