2017-04-11 14 views
0

ruby​​ on railsでlink_toを使用してパラメータを渡そうとしていますが、送信しているidパラメータがnullです。 私はIDを送信しています。link_toを使用したパラメータの受け渡し

<% @conference.papers.each do |paper| %> 
<tr> 
    <td><%= paper.title %></td> 
    <td><%= paper.author %></td> 
    <td><%= link_to "Download Paper", paper.attachment_url %></td> 
    <td><%= link_to 'Reviews', paper %></td> 
    <% if (paper.accepted) %> 
     <td><%= "Accepted" %></td> 
    <% else %> 
     <td><%= "Not accepted" %></td> 
    <% end %> 
    <% if (@state1 && paper.accepted == false) %> 
    <td><%= button_to "Accept", accept_paper_path(id: paper.id), class: "btn btn-danger", data: { confirm: "Are you sure that you wish to accept #{paper.title}?"} %></td> 
    <% end %> 
    <% if (@state2) %> 
    <% session["a"] = paper.id %> 
    <td><%= link_to "Review paper", new_review_path(id: paper) %></td> 
    <% end %> 

</tr> 
<% end %> 

レビューコントローラ用のコード

def new 
@paper = Paper.find_by_id(params[:id]) 

@review = Review.new() 

エンド

答えて

0

あなたは

link_to "Review paper", new_review_path(id: paper.id) 

.idを逃した。しかし、それはグラムではありません溶液に溶解する。 Paperモデルhas_many :reviewsの場合は、のルートにreviewsルートをネストする方がよいでしょう。このように:

/論文/生成します

link_to "Review paper", new_paper_review_path(paper) 

:paper_id /レビュー/新

# config/routes.rb 

resources :papers do 
    resources :reviews 
end 

だから、あなたのlink_toは次のようになりますRailsルーティングの詳細については、hereをご覧ください。

resouces :papers do 
    member do 
    patch :accept 
    end 
end 

これは、あなたがPATCH /papers/:idによる審査を受け入れるようになる:

+0

は実際には '問題ではありません.to_param'モデル上に「paper_path(paper)」、「paper_path(id:paper)」、「paper_path(id:paper.id)」の結果は同じです。 – max

0

はルートを適切に設定することから始めましょう。 - それは非冪等のアクションがあるためではないGETこれはPATCHまたはPUT HTTPメソッドを使用する必要があること

<%= button_to accept_paper_path(paper), method: :patch %> 

注:ボタンの使用を作成します。

accept_paper_path(id: model)またはaccept_paper_path(id: model.id)の代わりにモデルを渡すことができます。あなたはnested resourceと呼ばれるものを作成することになるでしょうレビューのために

resouces :papers do 
    member do 
    patch :accept 
    end 
    resources :reviews, only: [:new, :create] 
end 

これは、あなたのルート/papers/:paper_id/reviews/newを与えます。親と子を含む配列を使用しての使用正しいパスに新しいレビューを作成するフォームを設定するには

<%= link_to "Review paper", new_paper_review_path(paper) %> 

:レールが呼び出されますので、IDを省略

<%= form_for([@paper, @review]) %> 
関連する問題