我有三種型號:Post,
Reply
和Vote
。 Vote
與Post
和Reply
一個多態關聯:顯示在相同視圖中的多態關聯的形式?
routes.rb中:
resources :posts do
resources :votes
resources :replies do
resources :votes
end
end
resources :votes, only: [:create, :destroy]
votes_controller.rb:
def create
@votable = find_votable
@vote = @votable.votes.create(params[:vote])
if @votable.save
# vote saved
else
render :action => 'new'
end
end
private
def find_votable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
posts_controller.rb:
def show
@post = Post.find(params[:id])
@replies = @post.replies.paginate(page: params[:page])
@reply = @post.replies.build
@votable = ? # not sure what to add here
@vote = Vote.new
end
帖子/ show.erb:
<%= form_for ([@votable, @vote]) do |f| %>
<p>
<%= f.label :polarity %><br />
<%= f.text_field :polarity %>
<%= f.label :user_id %><br />
<%= f.text_field :user_id %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
<%= render 'replies/form' %>
回覆/ form.rb:
<%= form_for ([@votable, @vote]) do |f| %>
<p>
<%= f.label :polarity %><br />
<%= f.text_field :polarity %>
<%= f.label :user_id %><br />
<%= f.text_field :user_id %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
我不知道如何在後控制器定義@votable
它確實是這樣Post.find(params[:id])
爲投票表格,Reply.find(params[:id])
爲投票表格。這很難,因爲posts
和replies
處於相同的顯示視圖。
有什麼解決方法嗎? (或者有更好的方法嗎?就像在票務控制器中製作@votable
變量,在後控制器中可用?)
你是如何解決這個問題的?有完全相同的問題! – Mohamad