Ruby on rails Rails 4,如何从表单中的字符串字段创建新的模型实例?

Ruby on rails Rails 4,如何从表单中的字符串字段创建新的模型实例?,ruby-on-rails,ruby-on-rails-4,rails-models,Ruby On Rails,Ruby On Rails 4,Rails Models,在Rails 4中执行以下操作的正确方法是什么?我有一个表单,它接受一个字符串和一些特定模型的其他参数,比如Foo。此模型与另一个模型有关联 class Foo < ActiveRecord::Base belongs_to :bar end class Foo

在Rails 4中执行以下操作的正确方法是什么?我有一个表单,它接受一个字符串和一些特定模型的其他参数,比如Foo。此模型与另一个模型有关联

class Foo < ActiveRecord::Base
  belongs_to :bar
end
class Foo
我想从给定的字符串创建一个新的条,假设数据库中不存在具有该名称的条

我最初的方法是在控制器级别这样做,基本上从参数中获取名称,然后尝试从中创建一个对象,并修改原始参数以包含新对象而不是原始字符串。但我意识到,这不是非常惯用的Rails,我应该完全在模型级别上进行


那么,我将如何在模型级别完成我想要做的事情呢?我想我需要一个瞬态属性和某种类型的
,然后再进行验证
筛选,但我对Rails不太熟悉。有什么想法吗?

为什么需要改变参数?IMO应在控制器级别执行此操作,但不更改任何参数

class FoosController

  before_filter :set_foo
  before_filter :set bar

  def update
    @foo.bar = @bar
    @foo.update(foo_params)
    respond_with @foo
  end

  private 

    def set_foo
      @foo = Foo.find(params[:id])
    end

    def set_bar
      @bar = # create/find your Bar from the params here
    end

    def foo_params
      params.require(:foo).permit(...)
    end

end

不确定是否正确理解了您要做的事情,但您可能想看看

您将拥有如下所示的Foo类:

class Foo < ActiveRecord::Base
  has_one :bar

  accepts_nested_attributes_for :bar
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

很抱歉,我没有完全解释,我需要改变参数的原因是因为我正在扩展一个现有的控制器(Desive registration controller)并调用super。谢谢,这让人感觉很好欢迎您,您可能想看看rails 4是如何将嵌套的参数作为强参数处理的
foo = Foo.new(bar_attributes: { name: "Bar's name" })
foo.bar.name
#=> "Bar's name"