尝试在我的应用程序上实现后收藏

时间:2018-07-05 11:33:44

标签: ruby-on-rails ruby ruby-on-rails-5

我是新手,正在开发应用程序,并尝试为用户发布实现偏爱,我使用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?):

1 个答案:

答案 0 :(得分:0)

我刚刚注意到您在 _button.html.erb 中的按钮上使用了remote: true。这导致动作由ajax执行。这意味着单击按钮后您将看不到任何东西。检查您的服务器日志以查看请求是否真正通过。

要处理对远程请求前端的响应,您将需要一些javascript。或者只是删除远程标志。

更多信息:guides.rubyonrails.org/working_with_javascript_in_rails.html#remote-elements