Ruby on Rails
Saturday, November 2, 2019
On Friday, November 1, 2019 at 8:53:01 AM UTC-4, Walter Lee Davis wrote:
> On Nov 1, 2019, at 2:12 AM, fugee ohu <fuge...@gmail.com> wrote:
>
>
>
> On Friday, November 1, 2019 at 12:12:18 AM UTC-4, Ariel Juodziukynas wrote:
> If you have:
> item has_many item_item_properties
> item_item_property belongs_to item_property
>
> then you can add a relationship on the item model
>
> has_many :item_properties, through: :item_item_properties
>
> Then you'll be able to call @item.item_properties to loop through the ItemProperty objects associated to that Item object.
>
> Now, you say @item.item_item_properties.pluck(:item_property_id) returns an empty array, that's because the Item does not have associated properties and pluck does an SQL.
>
> El vie., 1 nov. 2019 a las 0:52, fugee ohu (<fuge...@gmail.com>) escribió:
>
>
> On Thursday, October 31, 2019 at 11:32:22 PM UTC-4, Ariel Juodziukynas wrote:
> You can do @item.item_item_properties.each do |item_item_property| and handle that object inside the loop, I'm not sure why would you expect that item_item_properties relationship to return key, value pairs. I don't understand what you want to achieve, maybe you are trying to do it on the wrong path.
>
> El vie., 1 nov. 2019 a las 0:27, fugee ohu (<fuge...@gmail.com>) escribió:
>
>
> On Thursday, October 31, 2019 at 9:33:22 PM UTC-4, Ariel Juodziukynas wrote:
> @item.item_item_properties returns a collection of objects, you are calling a method on something array-like, it makes no sense.
>
> If you want to get all the item_property_ids you can do @item.item_item_properties.pluck(:item_property_id) for example. I'm not sure what you want to achieve.
>
> El jue., 31 oct. 2019 a las 22:29, fugee ohu (<fuge...@gmail.com>) escribió:
>
>
> On Thursday, October 31, 2019 at 2:15:48 PM UTC-4, Ariel Juodziukynas wrote:
> Use `.size` instead of `.count`. "count" does a database query and since you only built the element the COUNT db query will return 0. "size" knows what to do if the association is already initialized so it will return "1" in your case (and if it's not already loaded it will run a COUNT db query).
>
> El jue., 31 oct. 2019 a las 8:42, fugee ohu (<fuge...@gmail.com>) escribió:
> > @item=Item.new
> > @item.item_item_properties.build
> > @item.item_item_properties.count
> => 0
>
> Why doesn't my @item object have any item_item_properties after build method
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ .161b90ed-b6b1-4d4d-9f67- fb70f0463621%40googlegroups. com
>
> How do I reference individual columns?
> 2.3.3 :006 > @item.item_item_properties.item_property_id
> NoMethodError: undefined method `item_property_id' for #<ItemItemProperty::ActiveRecord_Associations_ CollectionProxy: 0x0055d4167fd628>
>
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ .a80b3961-82df-4943-9e5a- adb764d516b7%40googlegroups. com
>
> Could I directly access key, value without pluck or otherwise like
> @item.item_item_properties.each do |key, value|
> item_property_id
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ .b2057f01-80e0-4816-8893- b783e30159f8%40googlegroups. com
>
> Display item_property attributes in form
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ .3a2c3dcf-3b21-49c9-8e49- 9b2f276d7b6d%40googlegroups. com
>
> There are no database records yet, we know, the object was instantiated by the build method but so far I don't see how to read it's data for my views
>
You're trying to build a nested form, with the possibility of adding N children to the parent form. When you build a new child object in memory, you need to create a form for that object dynamically. There's a Railscast about this idea, which you may find useful: http://media.railscasts.com/assets/episodes/videos/196- nested-model-form-revised.mp4
Here's a link to the article about that screencast: http://railscasts.com/episodes/196-nested-model- form-revised
Please note that these videos are very old, and the specific details may differ from modern Rails practice, but the ideas underlying them are sound, and still hold up today.
Walter
def new
@item = Item.new(item_params)
ItemProperty.where(item_type: params[:item][:item_type]).each do |ip|
@item.item_item_properties.build(item_property_id: ip.id)
end
@item = Item.new(item_params)
ItemProperty.where(item_type: params[:item][:item_type]).each do |ip|
@item.item_item_properties.build(item_property_id: ip.id)
end
end
Then trying to reference @item.item_item_properties.item_property_id returns error:
NoMethodError: undefined method `item_property_id' for #<ItemItemProperty::ActiveRecord_Associations_CollectionProxy:0x0056269f53ab08>
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/adbe5063-5278-4680-b50f-27ecf4e5f339%40googlegroups.com.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment