尝试入门的完整铁轨新手.
我有两个课程,成分和单元.有三个单位,磅,加仑和几十个,每个成分只有一个单位.我想我已正确设置了关联/路由.在创建新配料时,我需要用户从这三个设置单位.我用另一个问题来解决这个问题:Drop Down Box - 填充表单中另一个表的数据 - Ruby on Rails
成分模型:
class Ingredient < ActiveRecord::Base
belongs_to :unit
end
Run Code Online (Sandbox Code Playgroud)
单位模型:
class Unit < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
路线:
map.resources :ingredients, :has_many => :unit_conversions
map.resources :units, :has_many => :ingredients
Run Code Online (Sandbox Code Playgroud)
配料新控制器
def new
@ingredient = Ingredient.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @ingredient }
end
end
Run Code Online (Sandbox Code Playgroud)
成分新视图:
<h1>New ingredient</h1>
<% form_for(@ingredient) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :needsDefrosting %><br />
<%= f.check_box :needsDefrosting %>
</p>
<p>
<%= f.label :baseName %>
<%= f.collection_select :unit_id, @ingredient, :id, :baseName, :prompt => "Select a Base Measurement"%>
<br />
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', ingredients_path %>
Run Code Online (Sandbox Code Playgroud)
错误是
NoMethodError in Ingredients#new
Showing app/views/ingredients/new.html.erb where line #16 raised:
undefined method `map' for #<Ingredient:0x3dae1c0>
Extracted source (around line #16):
13: </p>
14: <p>
15: <%= f.label :baseName %>
16: <%= f.collection_select :unit_id, @ingredient, :id, :baseName, :prompt => "Select a Base Measurement"%>
17: <br />
18: </p>
19: <p>
RAILS_ROOT: C:/Users/joan/dh
Run Code Online (Sandbox Code Playgroud)
我只有三天左右的RoR,所以我怀疑它很简单!
collection_select需要一系列选项,你传递的是一种成分.将@ingredient更改为Unit.all应该修复它.
%= f.collection_select :unit_id, Unit.all, :id, :baseName, :prompt => "Select a Base Measurement"%>
Run Code Online (Sandbox Code Playgroud)
作为旁注,如果你只有3种类型的单位,那么创建一个常量而不是单位表就更有意义了.这将减少连接数并使整个模型更简单一些.
| 归档时间: |
|
| 查看次数: |
7658 次 |
| 最近记录: |