Создание вложенной модели вручную в Rails 3 - PullRequest
0 голосов
/ 21 июля 2011

У меня есть recipe форма, которая также has_many ингредиенты. Через некоторые (помимо сути) из выбора шаблонов я получаю параметры, которые выглядят так, как будто они передаются в мое действие «create» на контроллере «Recipes»:

{
   "commit"   =>"Create Recipe",
   "authenticity_token"   =>"qIeydCyOetcmu2bba3BM9X7HSXXtiFt7cuyuK7yvTPc=",
   "utf8"   =>"✓",
   "recipe"   =>   {
      "title"      =>"",
      "url"      =>"",
      "site"      =>"",
      "instructions"      =>"",
      "ingredients_attributes"      =>      {
         "0"         =>         {
            "quantity"            =>"5",
            "name" => "flour"
         }
      }
   }
}

Я пытаюсь вбить это в модель, чтобы сохранить все сразу, но без пользы от конструктора форм. Я пробовал различные способы сохранить это в моей модели, когда я звоню @recipe.save, но всегда кажется, что это игнорируется. Я пытаюсь превратить это в массив, который ожидала бы модель, и это тоже не работает. Вот код контроллера, с которым я возился:

  def create
    arrayIngredients = [];
    params[:recipe][:ingredients_attributes].values.each do |value|
      arrayIngredients.push value
    end 

    @recipe = Recipe.new(params[:recipe])
    @recipe.ingredients.build = arrayIngredients 
         # at this point this is [{"name"=>"flour"}] and so forth
    @recipe.user_id = current_user.id
    @recipe.title = @recipe.inspect  # just debugging purposes
    respond_to do |format|
      if @recipe.save... # do stuff

Мне кажется, я очень близок к этому, но мне не хватает одной ключевой вещи, чтобы сделать это правильно сохраненным (в настоящее время в окне терминала он показывает NULL во всех операторах INSERT)

Спасибо за любой вклад!

1 Ответ

0 голосов
/ 21 июля 2011

Добавьте accepts_nested_attributes_for :ingredients к вашей модели рецепта и (при необходимости) добавьте attr_accessible :ingredients_attributes

...