Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在一种方法下组合这两个代码?(第3条)_Ruby On Rails_Ruby - Fatal编程技术网

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
实际上是。。。类,现在应该可以了:)