【发布时间】:2015-03-29 14:32:27
【问题描述】:
我刚开始学习 Rails 4.2。 问题是表单中的一个字段没有显示出来。
我有餐厅、类别和一道菜。在创建菜品时,类别和餐厅也将通过 /dishes/new 输入。
预期行为:显示菜肴、类别和餐厅字段。
实际行为:仅显示 Dish 和 Category 字段。
这是我的模型
models/restaurant.rb
class Restaurant < ActiveRecord::Base
has_many :categories
has_many :dishes, :through => :categories
end
models/category.rb
class Category < ActiveRecord::Base
belongs_to :restaurant
has_many :dishes
end
models/dish.rb
class Dish < ActiveRecord::Base
belongs_to :category
validates :name, :price, :category, :restaurant, :presence => true
accepts_nested_attributes_for :restaurant, :category
end
菜控制器
def new
# I think this is where
# I am making a mistake
@dish = Dish.new
category = @dish.build_category
restaurant = category.build_restaurant
end
def create
@dish = Dish.new(dish_params)
respond_to do |format|
if @dish.save
.... # default stuff #
end
end
end
# strong params
def dish_params
params.require(:dish).permit(:name, :description, :price, restaurant_attributes: [:name], category_attributes: [:name])
end
菜肴视图/菜肴/_form.html.erb
<%= form_for(@dish) do |f| %>
<% if @dish.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@dish.errors.count, "error") %> prohibited this dish from being saved:</h2>
<ul>
<% @dish.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :nameWoW %><br>
<%= f.text_area :name %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :price %><br>
<%= f.number_field :price %>
</div>
*** The restaurant name field is not being displayed **
<%= f.fields_for :restaurant do |restaurant| %>
<div class="field">
<%= restaurant.label :Restname %><br>
<%= restaurant.text_area :name %>
</div>
<% end %>
<%= f.fields_for :category do |category| %>
<div class="field">
<%= category.label :Catname %><br>
<%= category.text_area :name %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我已经按照 Rails 指南中的步骤进行操作,浏览了有关 stackoverflow 的问题并阅读了一些博客文章,但无法找出问题所在。一些微观层面的错误阻碍了我:(。有谁知道出了什么问题?
提前致谢。
更新:
嘿,我找到了解决方案。
def new
@dish = Dish.new
@dish.build_category
@dish.category.build_restaurant
end
这很好用。但这只是实际解决方案的一部分。我还必须做很多 /dish/create 控制器修改。我认为整个解决方案必须放在博客文章中。否则它没有任何意义。我很快就会在这里发布和更新它。
【问题讨论】:
-
你写过那篇博文吗?
标签: ruby-on-rails ruby ruby-on-rails-4 erb