2009-12-10 47 views
0

我對我的rails應用程序有點麻煩。簡而言之,它是一個社交網絡應用程序,用戶可以在其中提交個人資料,提交意見,並可以對提交意見進行評論。rails routes params找到一個表格

我的路線如下:

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)),那麼它完美地工作......所以我錯過了什麼?我只是在愚蠢嗎?

我的關係也設置得很好。

在此先感謝。

回答

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 

T帽子應該解決它,但我建議做nested resources作爲第二步。

+0

工作完美!非常感謝!我剛剛在今天早些時候遇到了嵌套資源railscast,並計劃實施它,但還沒有找到你給我的hidden_​​field_tag的任何信息,所以非常感謝! – goddamnyouryan 2009-12-11 03:37:02