2012-11-21 67 views
1

我很難理解使用link_to和UJS傳遞參數的正確方法。使用link_to和UJS傳遞參數

我有以下資源: 「添加註釋」

  • 照片
  • 評論
  • 用戶

用戶試圖通過點擊照片發表評論發生這種情況時,使用UJS彈出一個框,顯示通過使用new.js.erb文件呈現的表單。發佈「創建註釋」後,將調用create.js.erb文件來處理更新,該更新僅隱藏註釋框並將註釋添加到註釋列表中。

在我index.html.erb我的照片我做了以下內容:

我指定的鏈接添加傳入當前照片的ID意見。

<%= link_to 'Add Comment', new_comment_path(photo_id: photo.id), remote: true %> 

這給我的網址:0.0.0.0:3000/comments/new?photo_id=1,這是我的期望。

現在的問題是,我該如何處理這個傳遞的參數在我的新的行動,這樣我可以指定類似

@comment.photo_id = photo_id 
or 
@comment.photo_id = params[:photo_id] 
我comments_controller.rb

有什麼我可以在JS做的事情,這將幫助我保存photo_id值到我的@ comment.photo_id列添加評論的列?

回答

0

首先,我會建議你開始使用嵌套的路線,如評論或喜歡的東西。你會發現這裏nested_routes_railscast

的railscast現在回到你的問題,在你的控制器使用@comment.photo_id = params[:photo_id]


有一個更好的方法來實現這一點,您可以在照片顯示頁面上有彈出窗口。在彈出窗口中,您可以爲新評論模型創建表單。點擊具體照片後,您只需使用javascript獲取該照片的ID,並將其複製到的隱藏字段中:photo_id

+0

如果您需要幫助,請聯繫我。 –

+0

感謝您的幫助。我會研究嵌套的路線,看看它是否會在這裏工作。我能夠通過new.js.erb顯示的_form.html.erb中的hidden_​​field使用它。 '<%= f。hidden_​​field:photo_id,{:value => params [:photo_id]}%> 之後,我可以使用'@comment.photo_id = params [:comment] [:photo_id]將值保存在comments_controller.rb中的create操作中]' – rjd

0

是的,你可以通過你指定的方式得到params中的photo_id。 假設照片在你的情況下有很多評論。 所以你的情況,當你得到PARAMS [:photo_id]在comments_controller 你可以這樣做: -

@photo = Photo.find_by_id(params[:photo_id]) 
@photo.comments.create(params[:comment]) 

請閱讀從guides.rubyonrails.org嵌套的資源,這樣你就可以產生寧靜創建註釋路線方式。