0

我有一个简单的应用程序,您可以在其中上传食谱

我刚刚整合了 gem terrarum,在我的国家模型中为我提供了世界上所有的国家。我有一个食谱有一个国家和一个国家属于食谱的关系。我正在使用来自 ryan bates 的嵌套表格,并且从我的成分模型和准备模型中获取要显示的信息没有问题。但是我无法将国家/地区名称保存在表格中或显示在视图中(尽管这是由于未保存到模型造成的)

代码如下

形式

<%= f.label :country_id, "Country Of Origin" %>
<%= f.collection_select(:country_id, Country.all, :id, :name, :prompt => 'Please select country') %>

看法

<% @recipes.each do |r| %>
<tr>
<td><%= r.dish_name %></td>
<td><%= r.country.name %></td>
<td><%= r.difficulty %></td>
<td><%= r.preperation_time %></td>
<td><%= ingredient_names(r.ingredients) %></td>
<td><%= preperation_steps(r.preperations) %></td>
<td><%= image_tag r.avatar.url(:thumb)%></td>
</tr>

帮手

def preperation_steps(preperations)
if preperations
  preperation_array = preperations.map {|pre| pre.prep_steps}
  preperation_array.join("\n")
end
end

def country_name(country)
if country
  country_array = country.map {|c| c.country_name}
  country_array.join("\n")
end
end
end

我已经包含了我的准备助手,所以我的 country_name 助手肯定反映了这一点吗?还是我不需要为此提供帮助?

配方控制器

def new 

@recipes = current_user.recipes if current_user.recipes #show recipes if the user has any recipes
 @favourites = current_user.favourites

end

配方模型

  belongs_to :user
  belongs_to :country
  has_many :ingredients 
  has_many :preperations
  has_many :favourites

  attr_accessible :dish_name, :difficulty, :preperation_time, :ingredients_attributes, :preperations_attributes, :country_id, :avatar:preperations_attributes, :country_id, :avatar

  has_attached_file :avatar, :styles => {  :medium => "300x300>", :thumb => "100x100>" } 

  accepts_nested_attributes_for :ingredients, :preperations

  scope :top_countries, order("country_of_origin DESC")

如果有人可以提供帮助,将不胜感激

谢谢

4

1 回答 1

1

在这段代码中,我看到两个错误:

  1. Recipe应该belong_to :country。不要has_one在这里使用。外键country_id应该在recipes表中。
  2. @recipe.build_country没有必要。您已经有一个国家/地区列表。仅build_country当您计划将新国家/地区添加到国家/地区列表时才应使用,在这种情况下您不是。

此外,您不需要fields_for. 你可以这样做:

<%= f.label :country_id, "Country Of Origin" %>
<%= f.collection_select(:country_id, Country.all, :id, :name, :prompt => 'Please select country') %>
于 2012-11-11T10:23:38.533 回答