+1 for what Ben said. Another piece for the puzzle can be attribute
accessors. For example if I had a User and a user had many categories, I
might have a methods on user like so
class User < ActiveRecord::Base
...
def category_names
self.categories.map &:name
end
def category_names=(values)
values.each do |v|
self.category_users.include(:category).where(category.name:
v).first_or_create
end
end
...
end
Rob
On Mon, Jan 23, 2017 at 11:27 AM Ben Wanicur <[email protected]> wrote:
> Look like you have some nested attributes there. My rule of thumb is that
> if the form seems very deadpan simple AND not likely to change very much,
> you can try to solve the issue using accepts_nested_attributes_for only (
> http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html).
>
>
> However, if the form even has even a hint of complexity, or might become
> more complex in the future, I'd use form objects (
> https://robots.thoughtbot.com/activemodel-form-objects). I use these 2
> libraries and I can pretty much "fake" almost any form object:
>
> - https://github.com/solnic/virtus
> - http://api.rubyonrails.org/classes/ActiveModel/Model.html
>
> You can use form objects to manage the inputs validation and
> parameters-massaging, or whatever else you might want, but I recommend
> using a service object to handle the actual submitting of the form.
> Whenever I try to force complex things into accepts_nested_attributes_for,
> I usually spend a few hours sobbing quietly in the corner.
>
> Good luck!
>
>
> Ben W
>
> On Mon, Jan 23, 2017 at 11:07 AM Hillary Hueter <[email protected]>
> wrote:
>
> I'm Not Sure How To Implement this form.
>
> I'm setting up a Tournament Management app. When a User Creates a
> Tournament they pick the contact methods that the tournament will use for
> contacting participants. This List is defined by the Values seeded into
> Contact Methods. When another User Registers for the Tournament, They Can
> Pick From any of the Tournament's Contact Methods and if neccessary provide
> optional information.
>
> I'm not really sure how to setup the form but what i want it to look like
> this:
>
>
> <https://lh3.googleusercontent.com/-soN19ipHYyc/WIZTVWtYmZI/AAAAAAAAAXw/LaPPNZm5FfcmGlG1VZ0T-6AOP4hsl4egwCLcB/s1600/Desired%2BForm.PNG>
>
>
>
> My Code
>
> *Models*
>
> class ContactMethod < ActiveRecord::Base
> has_and_belongs_to_many :tournaments
> has_and_belongs_to_many :registrations
> end
>
>
> class Tournament < ActiveRecord::Base
> has_and_belongs_to_many :contact_methods
> end
>
>
>
> class Registration < ActiveRecord::Base
> has_and_belongs_to_many :contact_methods
> end
>
>
> *Schema*
> create_table "contact_methods_registrations", force: :cascade do |t|
> t.integer "contact_method_id"
> t.integer "registration_id"
> t.string "value"
> end
>
> create_table "contact_methods_tournaments", force: :cascade do |t|
> t.integer "contact_method_id"
> t.integer "tournament_id"
> end
>
> *Form*
>
> <fieldset class="form-group">
> <legend>Contact Method</legend>
> <%= hidden_field_tag("registration[contact_methods][]", nil) %>
> <% @tournament.contact_methods.order(:name).each do |contact| %>
> <div class="form-check">
> <label class="form-check-label">
> <%= check_box_tag("registration[contact_methods][]",
> contact.id, contact.id.in?(@registration.contact_methods.collect(&:id)))
> %>
> <%= contact.name %>
> </label>
> </div>
> <div>
> <label>Your <%= contact.name %> Username</label>
> <%= text_field_tag "registration[contact_methods][]" %>
> </div>
>
> <% end %>
> </fieldset>
>
>
> Thanks.
>
> -Hillary
>
>
> --
> --
> SD Ruby mailing list
> [email protected]
> http://groups.google.com/group/sdruby
> ---
> You received this message because you are subscribed to the Google Groups
> "SD Ruby" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> SD Ruby mailing list
> [email protected]
> http://groups.google.com/group/sdruby
> ---
> You received this message because you are subscribed to the Google Groups
> "SD Ruby" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
--
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
---
You received this message because you are subscribed to the Google Groups "SD
Ruby" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.