成員創建的投票既屬於他們又屬於另一個模型,問題。目前我正在做一個隱藏的窗體並傳遞適當的參數。這裏有一個問題索引視圖代碼:有沒有辦法做到這一點在Rails沒有大規模任務?
<%= form_for(@vote) do |f| %>
<%= f.hidden_field "issue_id", :value => issue.id %>
<%= f.hidden_field "member_id", :value => session[:member_id] %>
<%= f.hidden_field "type", :value => :Upvote %>
<%= f.label issue.upvotes_count(issue.id) %>
<%= submit_tag "Up", :class => 'up-vote' %>
<% end %>
這似乎並不理想,因爲它留下ISSUE_ID和member_id打開質量分配。有沒有更好的方法來做到這一點與button_to標籤或什麼?
這裏的控制器代碼:
class VotesController < ApplicationController
#GET
def new
@vote = Vote.new
end
# POST
def create
@vote = Vote.new(params[:vote])
@vote.member_id = current_member
if @vote.save
redirect_to issues_path
else
redirect_to issues_path, notice: "you must be logged in to vote"
end
end
end
和
class IssuesController < ApplicationController
# GET
def index
@issues = Issue.find(:all)
@vote = Vote.new
end
# GET
def show
@issue = Issue.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
end
如果你還顯示你的控制器代碼,它會更容易回答。像timpone在下面說的那樣:通過這樣的'session [:member_id]'是無稽之談。只需在控制器中使用'current_user'即可。不涉及你的問題,但'issue.upvotes_count(issue.id)'很奇怪。如果你已經有一個實例,爲什麼要將'id'傳遞給一個實例方法? – Mischa
感謝您指出(計數功能)。我重構了代碼。 – Dan