【问题标题】:Create comments for two models from comments controller ruby on rails从评论控制器 ruby​​ on rails 为两个模型创建评论
【发布时间】:2013-10-06 12:38:53
【问题描述】:

Ruby on rails 新手,我之前一直在使用 CakePHP,希望让我的 create cmets 控制器为两个模型创建事件,请帮忙?

我的 cmets 控制器:

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

我的创建 cmets 视图:

<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 %>

【问题讨论】:

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


    【解决方案1】:

    这是一个多态关联的经典例子。

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

    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
    

    这将为您的 cmets 模型添加另一个名为 commentable_type 的属性,因此您可以为每个模型(地点、活动)设置不同的 cmets 类型

    你必须运行一个看起来像这样的迁移

      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 &lt;&lt; Comment.create!(:body =&gt; "Body", :commenter =&gt; "Guy") # or commenter =&gt; 1 depending on your schema

    它将作为评论保存到数据库中,您也可以为Event做同样的事情

    现在对于您的 cmets 控制器,我建议不要创建全局 cmets 控制器,而是遵循 RESTful 方法并让每个控制器处理他的 cmets。

    I.E

    # 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找到更多关于协会的信息

    祝你好运!

    【讨论】:

    • 感谢这个家伙,非常有帮助,我该如何设置我的控制器?
    • 每个模型的正常 CRUD
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 2014-08-19
    • 2012-11-07
    • 2018-04-27
    • 2016-04-17
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多