我正在处理我的第一个多态关联关系,但在重构我的 form_for 创建评论时遇到了麻烦。
我尝试通过多态关联 RailsCasts http://railscasts.com/episodes/154-polymorphic-association?view=asciicast ,但它似乎过时了。
我有两个问题:
(:commentable_id => @traveldeal.id)
以来的 traveldeals 。 谢谢!
用户名
class User < ActiveRecord::Base
has_many :comments, :dependent => :destroy
end
traveldeal.rb
class Traveldeal < ActiveRecord::Base
has_many :comments, :as => :commentable, :dependent => :destroy
end
评论.rb
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :commentable, :polymorphic => true
validates :user_id, :presence => true
validates :commentable_id, :presence => true
validates :content, :presence => true
end
traveldeal_show.html.erb
<%= render 'shared/comment_form' %>
_comment_form.html.erb
<%= form_for current_user.comments.build(:commentable_id => @traveldeal.id) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div>
<%= f.text_area :content %>
</div>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :commentable_id %>
<div>
<%= f.submit "Add Comment" %>
</div>
<% end %>
评论 Controller .rb
class CommentsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
def create
@comment = Comment.new(params[:comment])
@comment.save
redirect_to root_path
end
end
最佳答案
Railscast 中唯一注明日期的部分是路线。
回答你的第一个问题:像在 Railscast 中一样创建你的表单:
<%= form_for [@commentable, Comment.new] do |f| %>
<p>
<%= f.label :content %><br />
<%= f.text_area :content %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
如果你这样做,
commentable_type
将自动设置。您需要类型,以便您知道评论属于哪个模型。请注意,您必须在使用评论表单的方法中设置 @commentable
。例如。
class TraveldealsController < ApplicationController
def show
@traveldeal = @commentable = Traveldeal.find(params[:id])
end
end
关于ruby-on-rails - 多态关联中的注释重构Form_for Create方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10113981/