我是新手,正在开发应用程序,并尝试为用户发布实现偏爱,我使用this tuto,没有错误,但不起作用:>
show.html.erb:
<h1><%= @post.user.fname %> <%= @post.user.lname %>, <%= @post.user.age %> ans</h1>
<h2>Coach d'<%= @post.user.mother_tongue %></h2>
<p><%= @post.user.spoken_languages.map(&:name).sort.join(", ") %></p>
<p><%= @post.price %>€ / jour</p><br>
<p> <%= @post.user.fname %> en quelques mots :<br>
<%= @post.content %></p>
<p>HEBERGEMENT :<br>
<%= @post_attachments.build %></p>
<%= link_to "Contacter #{@post.user.fname}", '#' %><br><br>
<%= render partial: 'hearts/button', locals: { post: @post } %><br><br>
<% if @current_user == @post.user %>
<%= link_to "Editer", edit_post_path(@post) %>
<%= link_to "Supprimer", @post, method: :delete, data: { confirm: "Êtes-vous sûr?" }%>
<% end %>
_button.html.erb:
<% if current_user.heart?(@post) %>
<%= link_to "Unheart", unheart_path(post_id: @post.id), remote: true, method: :delete %>
<% else %>
<%= link_to "Heart", heart_path(post_id: @post.id), remote: true %>
<% end %>
hearts_controller.rb:
class HeartsController < ApplicationController
respond_to :js
def heart
@user = current_user
@post = Post.find(params[:post_id])
@user.heart!(@post)
end
def unheart
@user = current_user
@heart = @user.hearts.find_by_post_id(params[:post_id])
@post = Post.find(params[:post_id])
@heart.destroy!
end
end
heart.rb:
class Heart < ApplicationRecord
belongs_to :post
belongs_to :user
validates :user_id, uniqueness: { scope: :post_id }
end
post.rb:
has_many :hearts, dependent: :destroy
has_many :users, through: :hearts
user.rb:
has_many :hearts, dependent: :destroy
has_many :posts, through: :hearts
预先感谢您的帮助
heart.js.erb:
$('div#<%= dom_id(@post) %>').html('<%= j render partial: "button", locals: {post: @post} %>');
unheart.js.erb:
$('div#<%= dom_id(@post) %>').html('<%= j render partial: "button", locals: {post: @post} %>');
erreur:
ActionController::RoutingError (undefined method `respond_to' for HeartsController:Class Did you mean? respond_to?):
答案 0 :(得分:0)
我刚刚注意到您在 _button.html.erb 中的按钮上使用了remote: true
。这导致动作由ajax执行。这意味着单击按钮后您将看不到任何东西。检查您的服务器日志以查看请求是否真正通过。
要处理对远程请求前端的响应,您将需要一些javascript。或者只是删除远程标志。
更多信息:guides.rubyonrails.org/working_with_javascript_in_rails.html#remote-elements