Привязка пользователя к модели через идентификатор - PullRequest
0 голосов
/ 22 января 2020

У меня возникают трудности с выражением привязки пользователя к моей модели листинга.

Я создал форму Rails, когда связал designer_id (добавленный в перечисление_params в качестве метода частного контроллера), который свяжет выбранного пользователя с моделью листинга при создании:

#migration
add_column :listings, :designer_id, :integer

_form.html.erb
<%= collection_select :listing, :designer_id, @account.users, :id, :name, prompt: "Choose..." %>

При проверке в консоли форма вернула правильный идентификатор пользователя как designer_id. Успех!

Теперь мне нужно получить доступ к имени пользователя с помощью метода Listing, но я застреваю - проблема заключается в том, чтобы в первую очередь сделать перевод с идентификатора, полученного для пользователя, на который ссылаются:

 #listing.rb

  def designer
    self.designer_id == User.find_by_id(params[:name])
    if self.designer_id = nil
      return "N/A"
    else   
      return "#{User.name}"
  end

Очень ценится!

1 Ответ

1 голос
/ 22 января 2020

в миграции, если вы находитесь по крайней мере на рельсах 4, вы можете сделать

add_reference(:listings, :designer) вам может потребоваться сделать add_reference(:listings, :designer, :foreign_key => { to_table: 'users'}

другие опции, которые я часто использую add_reference(:listings, :designer, :foreign_key => { to_table: 'users'} index: true, limit: 8)

Миграция в сторону, вы можете сделать это в моделях.

class Listing
  belongs_to :designer, class_name: 'User', inverse_of: :listings


end

и у пользователей

class User
  has_many :listings, inverse_of: :designer, dependent: :destroy
end

Тогда имя пользователя будет

listing.designer.name

, если вы делаете это в контроллер, который вы хотите предварительно загрузить ассоциацию, чтобы вы не вводили запрос n + 1 в список списков.

...