2012-11-18 78 views
1

我有三種型號:Post,ReplyVoteVotePostReply一個多態關聯:顯示在相同視圖中的多態關聯的形式?

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])爲投票表格。這很難,因爲postsreplies處於相同的顯示視圖。

有什麼解決方法嗎? (或者有更好的方法嗎?就像在票務控制器中製作@votable變量,在後控制器中可用?)

+0

你是如何解決這個問題的?有完全相同的問題! – Mohamad

回答

相關問題