繁体   English   中英

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

[英]Create comments for two models from comments controller ruby on rails

Ruby on Rails新手,我以前一直在使用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 %>

这是多态关联的经典示例。

需要进行一些调整才能使其正常工作。

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方法,并让每个控制器处理他的注释。

IE

# 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

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM