2017-04-11 130 views
0

我想通過使用link_to與rails上的ruby傳遞參數,但它說我正在發送的id參數爲null。 我從哪裏發送身份證的代碼。爲審查控制器傳遞參數使用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但它不是A G ood解決方案。如果您的Paper模型has_many :reviews,最好將reviews路線嵌入paper的路線中。就像這樣:

# config/routes.rb 

resources :papers do 
    resources :reviews 
end 

所以,你link_to看起來像:

link_to "Review paper", new_paper_review_path(paper) 

這將產生

/紙/:paper_id /評論/新

您可以瞭解更多關於Rails路由here的信息。

+0

省略ID其實並不重要,因爲鐵軌調用'.to_param'在模型上。 'paper_path(paper)','paper_path(id:paper)'和'paper_path(id:paper.id)'的結果是相同的。 – max

0

讓我們通過正確設置路由開始:

resouces :papers do 
    member do 
    patch :accept 
    end 
end 

這將讓你通過PATCH /papers/:id接受審查。要創建按鈕使用:

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

注意,這應該使用PATCHPUT HTTP方法 - 不GET,因爲它是一個非冪等動作。

請注意,您可以通過模型而不是做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) %> 

設置窗體創建一個新的審查,以使用正確的路徑使用包含家長和孩子的數組:

<%= form_for([@paper, @review]) %>