Ruby on rails 如何在一种方法下组合这两个代码?(第3条)
我正在尝试将控制器内的这两个代码合并为“创建”下的一个代码Ruby on rails 如何在一种方法下组合这两个代码?(第3条),ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试将控制器内的这两个代码合并为“创建”下的一个代码 class PostcommentsController
class PostcommentsController
我在“创建”下尝试了这两种代码,它们都有效。
我有两种模式,我把后现代主义与之联系起来:微观主义和讨论。
我想应用正确的“create”,这取决于它是microspost还是讨论
以下是我在视图中讨论的内容
<%= form_for([@discussion, @comment]) do |f| %>
<%= f.text_field :comment_content %>
<button class="btn" type="submit">
Comment
</button>
<% end %>
评论
我将进行一次“盲”尝试,因为我现在无法访问我的环境,因此不会对其进行测试。请告诉我它是否在某处工作或挂起…:
def create
model = params.has_key?(:micropost_id) ? Micropost : Discussion
@object = model.find(params[model.to_s.foreign_key.to_sym])
@comment = Postcomment.new(params[:postcomment])
@comment.write_reflection(@object)
@comment.user = current_user
if @comment.save
redirect_to(:back)
else
render partial: 'shared/_postcomment_form', locals: { model.to_s.downcase.to_sym => @object }
end
end
在您的评论模型中:
def write_reflection(object)
if object.kind_of?(Micropost)
self.micropost = object
else
self.discussion = object
end
end
我将进行“盲”尝试,因为我现在无法访问我的环境,所以它不会被测试代码,请告诉我它是否工作或挂起在某处…:
def create
model = params.has_key?(:micropost_id) ? Micropost : Discussion
@object = model.find(params[model.to_s.foreign_key.to_sym])
@comment = Postcomment.new(params[:postcomment])
@comment.write_reflection(@object)
@comment.user = current_user
if @comment.save
redirect_to(:back)
else
render partial: 'shared/_postcomment_form', locals: { model.to_s.downcase.to_sym => @object }
end
end
在您的评论模型中:
def write_reflection(object)
if object.kind_of?(Micropost)
self.micropost = object
else
self.discussion = object
end
end
斯巴达已经回答了这个问题,所以我不再重复他的回答 但我想告诉你,这是一个非常糟糕的主意。这不是一种好的做事方式。您应该使用多态关联来表示与讨论和微博客的评论关系 如果将来情况发生变化,您将为自己设置不必要的重构 你必须问问自己,通过结合这两个行动,你想要达到什么目的?如果有一天你添加了另一个模型呢
def create
model = params.has_key?(:micropost_id) ? Micropost : Discussion
def create
model = case params
when params.has_key?(:foo) then foo
... # where do you stop?
您还必须在new
操作中重复此操作,以创建正确的对象并避免nil类
错误
这不是一种理智的做事方式
检查此项:(需要订阅)
或者这段老的但免费的插曲:斯巴达已经回答了这个问题,所以我不会重复他的回答 但我想告诉你,这是一个非常糟糕的主意。这不是一种好的做事方式。您应该使用多态关联来表示与讨论和微博客的评论关系 如果将来情况发生变化,您将为自己设置不必要的重构 你必须问问自己,通过结合这两个行动,你想要达到什么目的?如果有一天你添加了另一个模型呢
def create
model = params.has_key?(:micropost_id) ? Micropost : Discussion
def create
model = case params
when params.has_key?(:foo) then foo
... # where do you stop?
您还必须在new
操作中重复此操作,以创建正确的对象并避免nil类
错误
这不是一种理智的做事方式
检查此项:(需要订阅)
或者这段较老但免费的插曲:我遇到了这个错误:
PostcommentsController中的SyntaxError#创建“”语法错误,意外的“=”,需要关键字\u end@comment.send(model.to_s.downcase)=@object
知道应该如何更新代码吗?我非常感谢您的帮助出于某种原因,我遇到了以下错误:ActiveRecord::PostcommentsController中的AssociationTypeMismatch#create
<代码>预期的讨论(#63531588),获得微成本(#46911096)。这发生在我试图为“micropost”创建新注释时,它指的是第19行“write_reflection”中的postcomment模型,它是self.discussion=object
,也指postcomment控制器中的第17行,它是@comment.write_reflection(@object)
Oooooops,完全是我的错,好的,所以我编辑了我的答案。改变的那一行是一个if object.kind\u of?(Micropost)
它总是错误的,因为object.class.class
实际上是。。。类,现在这应该可以工作了:)我得到了这个错误:PostcommentsController中的SyntaxError#创建“”语法错误,意外的“=”,需要关键字\u end@comment.send(model.to_s.downcase)=@object
知道应该如何更新代码吗?我非常感谢您的帮助出于某种原因,我遇到了以下错误:ActiveRecord::PostcommentsController中的AssociationTypeMismatch#create
<代码>预期的讨论(#63531588),获得微成本(#46911096)。这发生在我试图为“micropost”创建新注释时,它指的是第19行“write_reflection”中的postcomment模型,它是self.discussion=object
,也指postcomment控制器中的第17行,它是@comment.write_reflection(@object)
Oooooops,完全是我的错,好的,所以我编辑了我的答案。改变的那一行是一个if object.kind\u of?(Micropost)
它总是错误的,因为object.class.class
实际上是。。。类,现在应该可以了:)