Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 Rails最佳实践:在模型中创建关联对象_Ruby On Rails_Ruby_Model View Controller - Fatal编程技术网

Ruby on rails Rails最佳实践:在模型中创建关联对象

Ruby on rails Rails最佳实践:在模型中创建关联对象,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我有三个基本表格:用户(电子邮件、密码)、联系人(姓名、电话)、关系(用户id、联系人id、级别) 当用户创建新联系人时,我希望他与之关联。协会的“友谊”等级为1至3级 我使用表单在我的联系人#创建控制器中输入级别 现在,我有一个很好用的 def create @contact = Contact.new(params[:contact]) if @contact.save #@relation = Relation.new(:user_id => curr

我有三个基本表格:用户(电子邮件、密码)、联系人(姓名、电话)、关系(用户id、联系人id、级别)

当用户创建新联系人时,我希望他与之关联。协会的“友谊”等级为1至3级

我使用表单在我的联系人#创建控制器中输入级别

现在,我有一个很好用的

  def create
    @contact = Contact.new(params[:contact])
    if @contact.save
      #@relation = Relation.new(:user_id => current_user.id, :contact_id => @contact.id, :level => params[:relation])
      #@relation.save
      redirect_to root_url, :notice => "ok!"
    else
      render "new"
    end
  end
我正在考虑将关系创建移动到我的联系人模型,以执行以下操作:

  after_create { Relation.create(user_id: current_user.id, contact_id: self.id, level: params[:relation]) }
当然,这不起作用,但你明白了。 把它放在模型里好吗?或者我能保持现在的状态吗


干杯像这样的?基本上,只需创建与当前用户关联的关系和联系人

当前用户关系创建(联系人:contact.new(params[:contact]),级别:params[:relation])


不要将其移动到创建后的位置。如果有什么东西在某处创建了一个函数来接受用户、联系人和关系。

类似的东西?基本上,只需创建与当前用户关联的关系和联系人

当前用户关系创建(联系人:contact.new(params[:contact]),级别:params[:relation])


不要将其移动到创建后的位置。如果有任何东西在某个地方创建了一个函数,可以接受用户、联系人和关系。

我宁愿将它保存在控制器中,就像您拥有它一样。出于测试(以及潜在的其他)目的,您可能不想让用户和联系人如此紧密地联系在一起。在我看来,控制器是将创建逻辑联系在一起的地方,像模型中的
after\u create
这样的方法更多的是设置某些参数,而不是创建新的关联,将来您可能不需要这些关联


tl;dr-在控制器中放置类似的东西会将两个模型紧密地耦合在一起。

我宁愿将它保留在控制器中,就像您拥有它一样。出于测试(以及潜在的其他)目的,您可能不想让用户和联系人如此紧密地联系在一起。在我看来,控制器是将创建逻辑联系在一起的地方,像模型中的
after\u create
这样的方法更多的是设置某些参数,而不是创建新的关联,将来您可能不需要这些关联


tl;dr-在控制器中放置类似的东西将两个模型连接得太紧了。

contact.rb

has_one :relation
accepts_nested_attributes_for :relation
关系

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save
像这样的视图

= for_form @contact do |f|
  = f.fields_for :relation do |r|
    = r.text_field :level
  = f.submit 'create'
控制器新操作

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save
控制器创建操作

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save

contact.rb

has_one :relation
accepts_nested_attributes_for :relation
关系

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save
像这样的视图

= for_form @contact do |f|
  = f.fields_for :relation do |r|
    = r.text_field :level
  = f.submit 'create'
控制器新操作

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save
控制器创建操作

belongs_to :contact
belongs_to :user
  @contact = Contact.new
  @contact.build_relation # create new relation object for the contact
  @contact = Contact.new(params[:contact])
  @contact.relation.user = current_user
  @contact.save

@contact.build_关系用于什么?@bobylapointe它将创建一个新关系并将其分配给
@contact
@bobylapointe
@contact。build_关系
将为联系人创建关系对象。有必要在contact Form内呈现关系视图@contact.build_relationship for?@bobylapointe它将创建一个新关系并将其分配给
@contact
@bobylapointe
@contact。build_relationship
将为联系人创建关系对象。有必要呈现接触形式内部的关系视图