gpt4 book ai didi

ruby-on-rails - 如何为has_one关联创建 View ?

转载 作者:行者123 更新时间:2023-12-04 14:05:41 26 4
gpt4 key购买 nike

因此,假设我有这个模型:

class Car
has_one :engine
end

和引擎模型:
class Engine
belongs_to :car
end

当我为用户提供表单时,他可以创建一辆新车,我只希望允许他从可用引擎之一中进行选择(可用引擎将在 select中,由 collection_select填充)。问题是,如果我像这样构建字段:
<%= f.collection_select :engine,Engine.all,:id,:name %>

当我尝试保存它时,我会得到一个AssociationTypeMismatch,说它需要一个Engine,但是它收到了一个字符串。

这是这样做的方法吗?
def create
car = Car.new(params[:car])
engine = Engine.find(params[:engine])
car.engine = engine
if car.save
# redirect somewhere
else
# do something with the errors
end
end

我一直觉得,Rails会自动完成诸如将引擎关联到汽车上的工作,但是我不知道如何让他做到这一点。

切换 has_onebelongs_to关联是实现此目的的唯一方法吗?

我迷路了,我觉得这里缺少一些非常基本的东西。

最佳答案

您应该使用engine_id

<%= f.collection_select :engine_id, Engine.all, :id, :name %>

UPD

由于 Engine不属于 Car,因此您应在此处使用嵌套属性。该截屏视频将对您非常有用:
  • http://railscasts.com/episodes/196-nested-model-form-part-1
  • http://railscasts.com/episodes/197-nested-model-form-part-2

  • 结帐api: http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for

    简短介绍:
    class Car
    has_one :engine
    accepts_nested_attributes_for :engine
    end

    并以您的形式:
    <%= form_for @car ... do |f| %>
    ...
    <%= f.fields_for :engine do |b| %>
    <%= b.collection_select :id, Engine.all, :id, :name %>
    ...
    <% end %>
    ...
    <% end %>

    关于ruby-on-rails - 如何为has_one关联创建 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572665/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com