Переключить (создать / уничтожить) связь между двумя записями в приложении Rails? - PullRequest
0 голосов
/ 21 мая 2018

у меня 3 модели.Пользователь (электронная почта, имя и т. Д.), Хобби (имя) и Интерес, который соединяет эти 2 (user_id, hobby_id).В / интересов у меня есть таблица хобби в настоящее время вошли в систему пользователя.Как создать кнопку для переключения (создания и уничтожения) соединения между пользователем и хобби?

Вот моя попытка:

<% @interest = Interest.new(hobby_id: hobby.id, user_id: @user.id) %> 
<%= link_to 'Create', new_interest_path, method: :get, class: "btn btn-primary" %>

А затем в new.html.erb

<p>UID: <%= @interest.user_id %></p>
<p>HID: <%= @interest.hobby_id %></p>

Но, конечно, это не сработает.

Полагаю, Rails создает новый экземпляр @ Interest каждый раз, когда я делаю запрос, но как мне это преодолеть?

1 Ответ

0 голосов
/ 21 мая 2018

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

Так что вваш контроллер, вы можете использовать find_or_initialize_by, чтобы получить интерес пользователей или инициализировать новый

@interest = @user.interests.find_or_initialize_by(hobby_id: hobby.id)

, а затем, по вашему мнению, определить, был ли ваш пользователь заинтересован, или мыинициализировал новый.Затем отобразите соответствующую ссылку

# check if `@interest` is a db record
<% if @interest.persisted? %>
  <%= link_to 'Destroy', interest_path, method: :delete, class "..." %>
<% else %>
  <%= link_to 'Create', new_interest_path, class "..." %>
<% end %>

РЕДАКТИРОВАТЬ:

Если вы хотите, чтобы кнопка для создания интереса одним щелчком мыши, вам нужно будет предоставить все параметры, которые вам нужны вДействие.Есть несколько способов сделать это.Вы можете сделать это несколькими способами

Использование спокойного маршрута может быть довольно многословным, поскольку у вас есть 3 уровня вложенности.используя маршрут, который выглядит как

users/:user_id/hobbies/:hobby_id/interests

Затем вы можете отправить ссылку (или построить форму) на этот маршрут

link_to user_hobby_interests_path([@user.id, hobby.id]), method: :post

или если вы хотите сохранить свой маршрут /interests, вам нужно создать форму с необходимыми параметрами

form_for @interest do |f|
  hidden_field_tag 'interest[user_id]', @user.id
  hidden_field_tag 'interest[hobby_id]', hobby.id
  submit_tag 'Create'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...