2011-07-20 114 views
1

我是Rails新手,现在正在尝试学习,所以希望有人可以提供帮助。Rails 3:在父节点的其中一个节点上创建子对象时更新多个父节点

我有3个模型用户,意见和投票与一对多的关系。每个user has_many :opinionshas_many :votes。每个opinion has_many :votesbelongs_to :user。每个vote belongs_to userbelongs_to opinion。投票表有以下列:决定(布尔),:opinion_id和:user_id。意见表只有:内容栏。

我的用例是用户添加一个意见,然后其他用户在查看每个意见(显示视图)时可以同意或不同意。

在意见显示视图我想有两个“同意”和“不同意”提交按钮。当用户提交投票时,我需要创建此投票(true或false)并更新投票表的user_id和opinion_id字段。我设法为每个家长单独进行,但不是同时进行两次。任何帮助将非常感激。

+0

如果投票只是 “同意” 或 “不同意” 我建议没有把它单独的模型。把它看作是一个意见模型的一个属性。 'attr_accessible:vote'。然后,当用户点击同意或不同意提交按钮时,update_attribute。如果你想保留投票模型,可以考虑将它与用户模型分开,以便'User has_many:views'和'Opinion has_many:votes',但是投票不属于User_to用户。据我所知用户可以没有意见没有票。 –

+0

感谢您的建议,但我认为它不适用于我的特殊情况。我需要跟踪用户的投票,而他们投票的意见不属于这些用户,即该意见属于另一个用户,并且有多个其他用户的投票。 – Evgeny

回答

0

将两个ID都作为隐藏字段。

意见放映视图:

<%= form_for(@vote) do |f| %> 
<%= f.hidden_field :user_id, :value => @user.id %> 
<%= f.hidden_field :opinion_id, :value => @opinion.id %> 
<%= submit_tag 'Agree', :name => 'agree_button' %> 
<%= submit_tag 'Disagree', :name => 'disagree_button' %> 
<% end %>` 

投票控制器:

def create 
    @vote = Vote.new(params[:vote]) 
    if params[:agree_button] 
    @vote.agreement = 1 
    elsif params[:disagree_button] 
    @vote.agreement = -1 
    end 
    flash[:notice] = "Thank you for your vote." if @vote.save 
    redirect_to(opinion_path(@vote.opinion_id)) 
end 
+0

它的工作原理!非常感谢! Спасибо:) – Evgeny