Создание нескольких вложенных объектов - PullRequest
0 голосов
/ 12 мая 2011

Я слишком долго боролся с этим.

Для простоты предположим, что у меня есть приложение Lead The Jungle, в котором пользователи спрашивают для рекомендаций по некоторым направлениям. В ответ на это другие, опытные пользователи предлагают человека-гида, который приведет их прямо к делу.

Предположим, у меня есть следующие модели.

class User < ActiveRecord::Base
  has_many :destinations
  validates :username, :email
  #..
end

class Recommendation < ActiveRecord::Base
  belongs_to :user
  belongs_to :destination
  belongs_to :guide
  #..
end


class Guide < ActiveRecord::Base
  has_many :recommendations
  validates :name, :nickname, :phone
  #..
end

class Destination < ActiveRecord::Base
  has_many :recommendations
  has_many :users
  #..
end

На моей странице, рядом с картой джунглей, я хочу иметь один виджет, в котором Я могу предложить до трех рекомендаций с соответствующим гидом по одному пункту назначения. Я также хочу дать контактные данные гида.

Дело в том, что у меня нет этих трех рекомендуемых руководств по некоторым групповым отношениям (например, фотографии в галерее). Поэтому я не могу просто использовать вложенные атрибуты в этом случае.

Есть ли способ создать несколько вложенных объектов без одного родительского объекта, содержащего их все?

Я попробовал следующее (среди многих других подходов), но параметры направляющих не соответствуют их рекомендациям, и я не вижу, какое руководство связано с какой рекомендацией.

<%= form_tag('recommendations') do -%>
   <ul id="selected-guides">
     <% @recommendations.each_with_index do |recommendation, index| %>
       <%= render 'recommendation_fields', :recommendation => recommendation} %>
     <% end %>
   </ul>
   <%= submit_tag %>
<% end %>

_recommendation_fields.erb

<%= fields_for recommendation do |Recommendation_fields| %>
  <div>
    <%= fields_for recommendation.guide do |guide_fields| %>
      <%= guide_fields.text_field :name %>
      <%= guide_fields.text_field :nickname %>
      <%= guide_fields.text_field :phone %>
    <% end %>
  </div>
<% end %>

Спасибо за помощь!

1 Ответ

0 голосов
/ 12 мая 2011

вы можете попробовать рельсы 3.1 и пойти с множеством через ассоциацию.Смотрите новый скринкаст от Райана Бейтса, он может вам помочь!

http://railscasts.com/episodes/265-rails-3-1-overview

Райан пример для проекта (models / project.rb)

has_many :tasks
has_many :assigments, :through => :tasks
has_many :users, :through => :assignments

вваш случай, вы можете получить доступ также, как это, я полагаю,

...