В моем приложении на Rails 6 у меня есть вид, который показывает кнопку «следовать» (создает запись при нажатии) или кнопку «отписаться» (удаляет запись при нажатии).
Когда она нажата, я хочу, чтобы действие сработало, но я также хочу, чтобы кнопка менялась (следуйте за изменением кнопки, чтобы отменить подписку, и наоборот).
С этим можно справиться: (1) переключиться с кнопки «следовать» на кнопку «отменить подписку» при нажатии (2) переключить обратно с «отменить подписку» (повторять) при нажатии
Однако после шага 2 кнопка больше не работает, пока я не перезагружу страницу (даже если я перейду на другие страницы и вернусь на эту страницу). Как я могу получить так, чтобы переключение назад и вперед работало с перезагрузкой страницы независимо от того, сколько раз они нажали?
# the model
def follows?(account_tag_id)
user_tag = self.followed_topics.where(account_tag_id: account_tag_id)
if user_tag.present?
return true
else
return false
end
end
# in the view:
<% if current_account_user.follows?(@tag.id) == true %>
<%= render 'unfollow_button', account_tag: @tag %>
<% else %>
<%= render 'follow_button', account_tag: @tag %>
<% end %>
# follow_button partial
<%= link_to followed_topics_path(account_tag_id: account_tag.id), method: :post, remote: true do %>
<button class="btn btn-fab btn-primary">
Follow
</button>
<% end %>
# unfollow_button partial
<%= link_to current_account_user.followed_topics.find_by_account_tag_id(account_tag.id), method: :delete, remote: true do %>
<button class="btn btn-fab btn-primary">
Unfollow
</button>
<% end %>
# In the controller:
# POST /followed_topics
def create
@followed_topic = current_account_user.followed_topics.create!(:account_tag_id => params[:account_tag_id])
respond_to do |format|
format.html { redirect_back(fallback_location: root_path) } #, notice: "Follow successful" }
end
end
# DELETE /followed_topics/1
def destroy
@followed_topic = current_account_user.followed_topics.find(params[:id])
@followed_topic.destroy
respond_to do |format|
format.html { redirect_back(fallback_location: root_path) }#, notice: "Unfollow successful"
end
end