Глядя на множество учебных пособий по системам социальных ссылок в рельсах.Я заметил, что, похоже, постоянно используются друзья в качестве псевдонима для пользовательских объектов с моделью соединения "Friendship".
Сначала я следовал этому, но по мере продвижения вперед, кажется, что такие вещи, как create.friend
, действительно тупые.Теперь в моем примере я использую термины «контакт» и «соединение» ... Когда я перечисляю все контакты пользователя, я ожидаю сделать это через контроллер контактов и просмотра (/ contacts, / contacts /поиск, / contacts / create и т. д.), но все это на самом деле имеет дело с таблицей соединений (дружбы) ... с ходом это начинает казаться действительно задом наперед.
Почему это делается так?Единственное преимущество, которое я вижу, это возможность сказать что-то вроде «contact.email», но я не уверен, что дополнительная абстракция и гимнастика в моем коде того стоят.Я был бы так же рад сказать contact.user.email.
Ссылка на страницу контактов?link_to contact.user
(верно?)
Есть ли какой-нибудь фол, если у меня просто есть модель "контактов" со стандартными, очевидными, грубыми структурами и я отказываюсь от этого наложения пользовательской модели?Честно говоря, я не вижу большого выигрыша в том, чтобы возиться с пользовательской моделью вообще намного больше, чем аутентификация ... Я помещаю всю информацию для пользователя в профиль.
Или я что-то упустил?
ОБНОВЛЕНИЕ: мне кажется, что я неясен, поэтому я уточню.
План A:
def contact
belongs_to :user
belongs_to :connection, :class_name => 'User', :foreign_key =>'contact_id'
validates_uniqueness_of :contact_id, :scope => :user_id, :message => ' allready one of your contacts.'
attr_accessor :invite
end
Затем выполните обычную CRUD для этого.Переход на страницу «Контакты» покажет все мои контакты с обычными операциями crud и т. Д. Чтобы получить электронную почту контакта, я бы при этом сценарии сказал: contact.connection.email
Затем я сделал несколькопрочитал и увидел, что все остальные делают это:
class Connection < ActiveRecord::Base
belongs_to :user
belongs_to :contact, :class_name => 'User', :foreign_key =>'contact_id'
validates_presence_of :user_id
validates_presence_of :contact_id
validates_uniqueness_of :contact_id, :scope => :user_id, :message => ' allready one of your contacts.'
attr_accessor :invite
end
Но затем, используя контроллер контактов (контроллер друзей), чтобы передать это здесь.Единственная выгода, кажущаяся, что тогда вы можете сказать contact.email ... но это делает все грубое в контроллере контактов странным imho.Например:
http://railsforum.com/viewtopic.php?id=16760
Мне было интересно, почему явное отключение?
ОБНОВЛЕНИЕ 2:
Итак, я понял ... у контакта естьбыть ссылкой на пользовательскую модель ... не обойтись.3 шага независимо от этого события.Однако я все еще путаюсь с некоторыми тонкостями, когда пытаюсь выполнить по этому пути:
Является ли нарушение mvc наличием contacts_controller.rb с таким кодом:
# in contacts_controller.rb
def destroy
@connection = Connection.find(params[:id])
@connection.destroy
respond_to do |format|
format.html { redirect_to :action=>'index' }
format.xml { head :ok }
end
end
А потом становится странным, когда я пытаюсь выполнить form_for @connection, ошибки маршрутизации и все такое.Я знаю, что готовлю этот вопрос на кухне и действительно ценю все отзывы.
ОБНОВЛЕНИЕ 3:
Практический пример путаницы с этими отношениями иллюстрируется здесь.:
<% @contacts.each do |contact| %>
<li><%= contact.email %> <%= link_to 'Remove Contact', contact.connection, :confirm => 'Are you sure?', :method => :delete %></li>
<% end %>
При итерации по контактам пользователя, как я могу искусно вызвать соединение, которое вызывает этот контакт в списке, для назначения для удаления?Может быть, я должен просто перебирать соединения пользователя, вытягивая файл connection.contact.email для отображения электронной почты?