我想弄清楚如何抓住一個名爲「餐」的對象的當前實例來創建屬於它的食物對象。嘗試從父對象控制器創建一個子類對象
它可以在控制檯...其簡單,是這樣的:
user = User.first
user.meal.first.meal_foods.create
用戶可以有很多餐,每餐可以有很多meal_foods。
對我來說,挑戰在於創造食物控制器的食物控制器的創建行爲。
(我在這裏使用STI因此,「食品」控制器和「meal_food」名稱)
目前創建操作是這樣的:
@food = current_user.meal.meal_foods.build
我也試過這個,因爲東西複數化的對象名工作
@food = current_user.meal.meal_food.build
下面是它給出了兩個
錯誤210undefined method `meal_foods' for [#<Meal id: 17, user_id: 1, meal_name: "Meal">]:ActiveRecord::Relation
更新:
我專門爲這裏的問題是選擇正確的進餐創造一個meal_food。
在控制檯中,我可以選擇第一個,這很好。但在食品控制器中,我需要選擇正確的膳食爲其創建膳食。
Writing meals.first將爲該用戶選擇第一餐。如果我想選擇5人中的第三餐,我需要想出一個方法來獲取該餐的ID。
我只是嘗試這樣做:
<%= link_to "new food", foods_path(id: meal.id), method: :create %>
在meal.id通過爲可在foods_controller使用的參數。然後在foods_controller我所做的:
@meal_food = current_user.meals.find_by_id(params[:id]).meal_foods.build
它看起來像它的提交因爲頁面是一個成功的消息重新加載,但meal_food沒有創建,所以它只是不會顯示出來。
我在控制檯中檢查,並沒有新的食物正在爲此用戶的第一餐創建。
好吧,我意識到,我在上面寫了的link_to創建此網址:因爲PARAMS
foods?id=29
,我使用來獲取此ID不是工作方法[:id],則看爲一個路徑ID,而不是這個網址ID。
在此先感謝!
模型:
class Meal < ActiveRecord::Base
before_save :sanitize
has_and_belongs_to_many :meal_foods
attr_accessible :meal_name
def sanitize
self.meal_name = "Meal"
end
end
class Food < ActiveRecord::Base
attr_accessible :brand, :carbs, :fat, :name, :protien, :type
end
class MealFood < Food
has_and_belongs_to_many :meals
end
class User < ActiveRecord::Base
has_many :meal, dependent: :destroy
has_many :custom_foods, dependent: :destroy
的控制器:
class FoodsController < ApplicationController
#functions
def create
#this is where I need to grab the correct meal, and then create a meal_food for it...
if @meal_food.save!
flash[:success] = "Food created successfully!"
redirect_to meal_path(current_user.id)
else
flash[:error] = "Food couldn't be created."
redirect_to meal_path(current_user.id)
end
end
end
局部模板:
這裏的粗粉部分被認爲重複顯示每個餐。它有link_to用於創建一份屬於它所進食的餐食。
<tr>
<thead class=meal-thead>
<td class=meal-thead-name> <%= meal.meal_name %> </td>
<th> </th>
<th> </th>
<th> </th>
<th> </th>
<th> <%= link_to "x", meal_path(meal.id), method: :delete %> </th>
</thead>
<tbody class=meal-tbody>
<%# get reference to current meal and its foods %>
<%= render meal.meal_foods %>
<td class=remove-td-center> <%= link_to "new food", foods_path, method: :create %> </td>
</tbody>
</tr>
你可能想添加在全模型的定義。否則,它必須找出問題所在。似乎在'用餐'和'用餐食品'之間沒有'has_many'關聯。 – wintermeyer 2013-04-06 09:35:23
好的我已經添加了模型和一些臨時演員以防萬一 – 2013-04-06 14:17:21
-1錯誤消息非常明確 – kikuchiyo 2013-04-06 16:33:05