Я действительно застрял на эту проблему, и я не могу найти способ, чтобы выйти из него:Вложенные ресурсы имеет много: через выпуск отношений
У меня есть модель пользователя (построен с завещанию).
У меня есть модель элемента, которая является вложенным ресурсом для пользователя.
В пользовательской модели (user.rb):
# Setup the relations model
has_many :items, :dependent => :destroy
В модели элемента (item.rb):
# Setup the relations model
belong_to :user
в routes.rb:
resources :users do
resources :items
end
Таким образом, пользователь может создать изделие и получить его:
из пути: пользователь/1/items/1
Теперь я хотел бы, чтобы пользователь мог совместно использовать созданный им объект (с его помощью) с другим пользователем, но владел этим предметом (только пользователь который создал элемент, может его уничтожить, и только пользователь, создавший элемент, может обновить некоторое поле элемента, вместо этого другие поля должны быть обновляемыми (редактируемыми) также пользователем, полученным элементом). Другими словами, я хотел бы, чтобы разрешение на элемент было другим для создавшего его пользователя и пользователя, который только что получил его.
Для того, чтобы дать возможность совместного действия элементов между пользователями, я построить следующий as_many: через отношения:
Я создал другую модель, которая называется обмен (которые представляют совместную таблицу между моделью элемента и пользователем модель):
Затем я изменил user.rb (модель пользователя) следующим образом:
# Setup the Item relations model
has_many :items, :dependent => :destroy # this to set up the item ownership
#This to set up the has_many :through realtionship
#(note I am calling a new model shared_items - that really doesn't exist - is an item model)
has_many :sharings
has_many :shared_items, :foreign_key => "shared_user_id", :through => :sharings
accepts_nested_attributes_for :items #This will work for the nested items resource
accepts_nested_attributes_for :sharings #Do I really need this line??
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation,
:items_attributes, #This will work for the nested items resource
:sharings_attributes #Do I really need this line??
Затем я изменил item.rb (модель элемент) следующим образом:
# Setup the relations model
belong_to :user
#this two lines are suppose to connect the two models (item and receiver) using a joint table
has_many :sharings
has_many :shared_users, :foreign_key => "shared_item_id", :through => :sharings
accepts_nested_attributes_for :sharings #Do I really need this line??
attr_accessible :user_id, :item_type, :reference_date, :title,
:sharings_attributes #Do I really need this line??
Я написал sharing.rb (модель обмена - совместный стол) следующим образом:
belongs_to :shared_user, :class_name => "User"
belongs_to :shared_item, :class_name => "Item"
attr_accessible :shared_moment_id, :shared_user_id
После, я должен был учитывать тот факт, что приемник также является пользователем (является а также в моем приложении еще есть модель дружбы (которая позволяет пользователю дружить с другими пользователями, и это работает как шарм), но я считаю, что предложение Джоэля может помочь (или просто изменить ссылка на мою таблицу друзей).
С помощью этого на месте я могу создать спокойный контроллер для Item (ItemsController) и добавить новые, создавать, показывать, уничтожать и т. Д. Действия, которые позволят пользователю (фактически current_user) создавать элемент, уничтожать или обновлять это без проблем. (как вы можете видеть в модели элемента, есть внешний ключ user_id).
Что мне нужно сделать, чтобы создать спокойный контроллер для управления моделью совместного доступа (для создания новых общих элементов и для их назначения (совместно использовать их) с другими пользователями) ???
Как после вызова значений базы данных?Я имею в виду, например:
Пользователь с id 3 создал пять новинок (с идентификатором товара 1, 2,3,4,5), теперь он также решил поделиться некоторыми из этого элемента с другими пользователями (пункт 2 с пользователь 6, пункт 4,5 с пользователем 7,8,9) ???
вытаскивает вложенный ресурс для совместного использования, и теперь я просто:
элемента является вложенным ресурсом пользователя (пользователь/2/пункт/5) делясь будет ??
Пожалуйста кто мне помочь ....
Спасибо большое Dinuz
UPDATE Я был в состоянии позволить работать должным образом приложение, но только отдельные части:
пользователь создает элемент. После того, как он решил поделиться этим товаром с другим пользователем (и используя контроллер разделов - общий контроллер таблицы, мне удалось создать запись внутри общей таблицы (передача идентификатора пользователя и идентификатора элемента).
Теперь я хотел бы выполнить всю операцию всего за один кадр:
Текущий_защик (пользователь, который вошёл в систему) создает элемент, и ему нужно иметь в той же форме возможность поделиться им с другими пользователей (массив) или просто сохранить для себя.
Я считаю, что этот дальнейший шаг требует расплавить контроллер элемента и контроллер совместного доступа и сделать то же самое в новом виде.
Ну, как мне нужно продолжить? Если кто-то может предложить хороший учебник для has_many: это может покрыть мой случай (мне действительно нужно понять, как в этой ситуации будет выглядеть контроллер и представление), я думаю, что ассоциация модели настроена хорошо, но я не может понять, как работать с контроллером и представлением.
Привет, Джоэл, ваша идея хорошая, но мне нужно выяснить, как мне нужно настроить ассоциации в моделях. – Dinuz
Я собираюсь ИЗМЕНИТЬ свое сообщение, чтобы обновить вопрос. – Dinuz
Ну, я решил проблему .... спасибо снова, в любом случае, joel !!! – Dinuz