Я наконец-то решил проблему с этим атрибутом отношения обновления.
Сначала я должен был определить, что означала полученная ошибка. Для тех, кто еще относительно новичок в Rails, «неопределенный метод to_model для true: TrueClass» означает, что вы пытаетесь создать условный оператор без условного .
Операторы: current_user.favorite (@user) и current_user.unfavorite (@user) возвращали значение true, которое программа не знала, как оценивать. Поэтому мне пришлось изменить:
обертоны / _favorite.html.erb
<%= form_tag current_user.favorite(@user), remote: true do |f| %>
<div>
<%= hidden_field_tag :followed_id, @user.id %>
</div>
<%= button_tag(class: "d-block mx-auto btn btn-warning") do %>
<%= icon('far', 'star') %>
<% end %>
<% end %>
до ...
<%= link_to favorite_relationship_path(current_user.active_relationships.find_by(followed_id: @user.id)), method: :put, remote: true do %>
<%= button_tag(class: "d-inline btn btn-warning") do %>
<%= icon('far', 'star') %>
<% end %>
<% end %>
и аналогично с partials / _unfavorite.html.erb
Это также означало, что мне нужно было ввести последующие действия в контроллере отношений
Relationships_controller.rb
def favorite
@user = Relationship.find(params[:id]).followed
current_user.favorite(@user)
respond_to do |format|
# Handle a Successful Unfollow
format.html
format.js
end
end
def unfavorite
@user = Relationship.find(params[:id]).followed
current_user.unfavorite(@user)
respond_to do |format|
# Handle a Successful Unfollow
format.html
format.js
end
end
Эти действия контроллера будут затем возвращаться к моим методам пользовательской модели:
User.rb
def favorite(other_user)
active_relationships.find_by(followed_id: other_user.id).favorite
end
def unfavorite(other_user)
active_relationships.find_by(followed_id: other_user.id).unfavorite
end
, что, в свою очередь, приведет к успешному обновлению атрибутов модели отношений:
Relationship.rb
def favorite
update_attribute(:favorited, true)
end
def unfavorite
update_attribute(:favorited, false)
end