Ruby on Rails 中 Pets#edit 中没有方法错误

Mat*_*raf 2 ruby methods ruby-on-rails edit

我有一个 Ruby on Rails 应用程序,其中我有以下资源宠物、宠物类型、疫苗接种(给宠物接种疫苗的事件)和人员。所以,宠物属于一个类型(一个类型有很多宠物),疫苗属于一个宠物(一个宠物可以有很多疫苗)。我想要做的是:在疫苗接种索引中有一个带有提交按钮的可折叠列表(选择)o 所有宠物类型,以便我可以按宠物类型过滤疫苗接种。我的代码如下:

这是在宠物控制器中:

def new
  @pet = Pet.new
  @sex = ["Male" , "Female"]
  @owner = Person.where(occupation: "Owner")
end

def edit
end
Run Code Online (Sandbox Code Playgroud)

这是宠物形式:

<div class="field">
<%= form.label :owner %>
<%= form.collection_select(:person_id, @owner, :id, :surname) %>
</div>

<div class="field">
<%= form.label :name %>
<%= form.text_field :name %>
</div>

<div class="field">
<%= form.label :type %>
<%= form.collection_select(:type_id, Type.all, :id, :name) %>
</div>

<div class="field">
<%= form.label :born %>
<%= form.date_select :born %>
</div>

<div class="field">
<%= form.label :sex %>
<%= form.select(:sex, @sex) %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我在创建宠物方面没有任何问题,但是当我想编辑宠物时,它给了我无方法错误: 在此处输入图片说明

Seb*_*lma 5

当您使用 时collection_select,您传递的集合将被映射以创建select将要构建的选项:

collection.map do |element|
  [value_for_collection(element, text_method), value_for_collection(element, value_method), option_html_attributes(element)]
end
Run Code Online (Sandbox Code Playgroud)

现在你不及格的集合,这就是为什么你的错误,告诉你有没有方法mapnil对象。

如文档中所述,方法定义需要第二个参数,即集合:

collection_select(方法,集合,value_method,text_method,选项={},html_options={})

您应该像在form.collection_select(:type_id, Type.all, :id, :name).