从rails上的注释控制器ruby为两个模型创建注释

时间:2013-10-06 12:38:53

标签: ruby-on-rails ruby ruby-on-rails-3.2 ruby-on-rails-4 polymorphic-associations

Ruby on rails newbie在这里,我以前一直在使用CakePHP并希望允许我的创建注释控制器为两个模型创建事件,请帮忙吗?

我的评论控制器:

def create
    @event = Event.find(params[:event_id])
    @comment = @event.comments.create(params[:comment].permit(:commenter, :body))
    redirect_to event_path(@event)
  end

  def create
     @venue = Venue.find(params[:venue_id])
     @comment = @venue.comments.create(params[:comment].permit(:commenter, :body))
     redirect_to venue_path(@venue)
  end

我的创建评论视图:

<h2>Add a comment:</h2>
<%= form_for([@event, @event.comments.build]) do |f| %>
  <p>
    <%= f.label :commenter %><br />
    <%= f.text_field :commenter %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

1 个答案:

答案 0 :(得分:2)

这是多态关联的典型例子。

为了让它正常工作,会有一些调整。

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
  ...
end

class Venue < ActiveRecord::Base
  has_many :comments, as: :commentable
  ...
end

class Event < ActiveRecord::Base
  has_many :comments, as: :commentable
  ...
end

这将添加到您的注释模型另一个名为commentable_type的属性,因此您可以区分每个模型的注释类型(场地,事件)

您必须运行看起来与此类似的迁移

  def change
    create_table :comments do |t|
      t.integer  :commenter
      t.text     :body
      t.integer :commentable_id
      t.string  :commentable_type
      t.timestamps
    end
  end

现在,当您迁移时,您可以转到rails console并查看是否尝试

Venue.first.comments << Comment.create!(:body => "Body", :commenter => "Guy") # or commenter => 1 depending on your schema

它将作为评论保存到数据库中,您也可以对Event

执行相同的操作

至于你的评论控制器,我建议不要创建一个全局注释控制器,而是遵循RESTful方法并让每个控制器处理他的评论。

# routes.rb

resources :venues
  resources :comments
end

resources :events do
  resources :comments
end

这样你就可以根据每个控制器(场地/事件)调整你的视图,你可以按照RESTful方法,因为你可以使用HTML / JSON / XML,你可以获得更好的路径

/events/1/comments # index for all the comments for event 1 /events/1/comments/new # your add a comment form

同样适用于场地。

您可以在此处找到有关关联的更多信息http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

祝你好运!