Hi folks.

I'm trying to do stuff with models nested one layer deeper than I've
done in the past...and it's just not working properly.  Here's the
situation:

* I have three models involved here: Recipe, IngredientLine, and
Ingredient (it's a cookbook application).

class Recipe < ActiveRecord::Base
  has_many :ingredient_lines
  has_many :ingredients, :through => :ingredient_lines
end

class IngredientLine < ActiveRecord::Base
  belongs_to :ingredient
  belongs_to :recipe
end

class Ingredient < ActiveRecord::Base
  has_many :ingredient_lines
  has_many :recipes, :through => :ingredient_lines
end

* I'm trying to develop a form which edits a Recipe along with its
associated IngredientLines and Ingredients. Right now, I've been
working with this sort of thing (it's a Facebook app, hence the .fbml
extension, and I'm only doing relevant excerpts so as not to take up
too much space here):

--- recipe/views/new.fbml.haml ---

- form_for(@current_object) do |f|
  = f.text_field :name
  = render :partial => 'ingredient', :locals => {:f => f}
  = f.text_area :instructions

--- recipe/views/_ingredient.fbml.haml ---
- f.fields_for :ingredient_lines, :index => nil do |ff|
  %td= ff.text_field :quantity, :size => 3, :maxlength => 3, :id =>
nil
  %td= ff.text_field :unit, :id => nil
  - ff.fields_for :ingredient do |i|
    %td= i.text_field :name, :id => nil

* I've tried this with fields_for instead of f.fields_for as well.

* There's some JavaScript to produce multiple copies of the partial
for multiple ingredient, but I'm omitting that since it's not relevant
here.

* The HTML/FBML output for this is as expected:

<form action="/recipes" class="new_recipe" id="recipe_1015"
method="post">
  <input id="recipe_name" name="recipe[name]" size="30" type="text" />
  <input id="recipe_ingredient_lines__quantity" maxlength="3"
name="recipe[ingredient_lines][][quantity]" size="3" type="text" />
  <input id="recipe_ingredient_lines__unit" name="recipe
[ingredient_lines][][unit]" size="30" type="text" />
  <input id="recipe_ingredient_lines__ingredient_name" name="recipe
[ingredient_lines][][ingredient][name]" size="30" type="text" />
  <textarea cols="40" id="recipe_instructions" name="recipe
[instructions]" rows="20"></textarea>
</form>

So far so good.  But here's the problem: *submissions don't work quite
properly*.  When I fill out the form and submit it, I get params
entries like
"recipe"=>{"name"=>"Recipe", "ingredient_lines"=>[{"quantity"=>"1",
"unit"=>"cup", "ingredient"=>{}}], "instructions"=>"Preheat oven to
350°..."}. Note that ingredient_lines[0].ingredient.name is missing,
even if I enter text in the corresponding form field -- in other
words, what I should be seeing is something like "recipe"=>
{"name"=>"Recipe", "ingredient_lines"=>[{"quantity"=>"1",
"unit"=>"cup", "ingredient"=>{"name" => "flour"}}],
"instructions"=>"Preheat oven to 350°..."}.  What am I doing wrong?

Any suggestions would be helpful.  Thanks in advance!

Best,
--
Marnen Laibow-Koser
[email protected]
http://www.marnen.org
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to