Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我的创作与实践;删除不工作的路由不明白为什么?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 我的创作与实践;删除不工作的路由不明白为什么?

Ruby on rails 我的创作与实践;删除不工作的路由不明白为什么?,ruby-on-rails,ruby,Ruby On Rails,Ruby,您好,我正在尝试在我的应用程序中创建书签功能。我创造了 模型我想书签(Hairstyle),我还有一个用户模型和一个“Saved_Hairstyle”模型,它是场景中的连接表。 在my routes.rb文件中,我添加了一个创建和删除路由。在我的控制器中,我写出了创建和删除方法。然后,我继续将_链接到视图中的CREATE&DELETE方法路径 我希望当我点击创建链接时,一个POST方法被激发,这样我就可以在页面上显示一个元素为“书签”,当我点击删除链接时,一个DELETE方法被激发,这样我就可以

您好,我正在尝试在我的应用程序中创建书签功能。我创造了 模型我想书签(Hairstyle),我还有一个用户模型和一个“Saved_Hairstyle”模型,它是场景中的连接表。 在my routes.rb文件中,我添加了一个创建和删除路由。在我的控制器中,我写出了创建和删除方法。然后,我继续将_链接到视图中的CREATE&DELETE方法路径

我希望当我点击创建链接时,一个POST方法被激发,这样我就可以在页面上显示一个元素为“书签”,当我点击删除链接时,一个DELETE方法被激发,这样我就可以在页面上显示一个元素为“未书签”,但它们不起作用。 当我在RAILS C中创建RAILS路由时,我可以看到正确的路径,但是当我点击链接时,什么也做不了。 为便于理解,回购协议:

routes.rb

Rails.application.routes.draw do
  root to: 'pages#home'
  devise_for :users
  resources :hairstyles do
    member do
      put "like", to: "hairstyles#upvote"
      put "dislike", to: "hairstyles#downvote"
    end
    resources :comments, only: :create
    resources :saved_hairstyles, only: [:new,:create]
  end
  resources :saved_hairstyles, only: :destroy
  resources :comments, only: :destroy
  resources :hairdressers
end

class SavedHairstylesControllerformat.js#视图逻辑中似乎有一些错误。您正在加载保存的发型,并尝试再次对其进行预订标记。如果保存的发型不存在,您还将尝试删除该发型。路径帮助程序似乎也错了(delete方法不是嵌套的,嵌套的资源应该是复数)。也许应该是这样的:

   <div class="bookmark">
      <% saved_hairstyle = SavedHairstyle.find_by(user: current_user, hairstyle: hairstyle.id) %>
      <% if saved_hairstyle %>
        <%= link_to saved_hairstyle_path(saved_hairstyle), method: :delete do %>
           <i class="fas fa-plus-circle"></i>
         <% end %>
       <% else %>
          <%= link_to  hairstyle_saved_hairstyles_path(hairstyle), method: :post do %>
            <i class="fas fa-plus"></i>
          <% end %>
        <% end %>
    </div>


顺便说一句,如果你检查你的控制台,你可能会看到一些错误,这些错误会指引你正确的方向。您还应该将保存的发型查询移动到帮助器方法。

视图逻辑中似乎有一些错误。您正在加载保存的发型,并尝试再次对其进行预订标记。如果保存的发型不存在,您还将尝试删除该发型。路径帮助程序似乎也错了(delete方法不是嵌套的,嵌套的资源应该是复数)。也许应该是这样的:

   <div class="bookmark">
      <% saved_hairstyle = SavedHairstyle.find_by(user: current_user, hairstyle: hairstyle.id) %>
      <% if saved_hairstyle %>
        <%= link_to saved_hairstyle_path(saved_hairstyle), method: :delete do %>
           <i class="fas fa-plus-circle"></i>
         <% end %>
       <% else %>
          <%= link_to  hairstyle_saved_hairstyles_path(hairstyle), method: :post do %>
            <i class="fas fa-plus"></i>
          <% end %>
        <% end %>
    </div>


顺便说一句,如果你检查你的控制台,你可能会看到一些错误,这些错误会指引你正确的方向。您还应该将保存的发型查询移动到助手方法。

Hello@EJ2015现在我看了您的答案,我明白我做错了什么,因为我仍在学习,我必须逐行检查并写出每一行的内容(让您了解我的水平)。从您的评论中,我现在唯一不确定的是最后一部分,您说“您还应该将保存的发型查询移动到帮助器方法”。您的意思是什么,为什么?先谢谢你。p、 s我已经实现了你的代码,它似乎正在运行,我只是有专家宝石阻止正在执行的行动,所以我现在必须整理出来。太好了。我最后的观察只是提醒你,一旦你让事情运行起来,别忘了重构
app/helpers
通常是你可以放置你的小视图助手来清理你的模板的地方。好的,我明白了,我不知道,但这很有意义。再次感谢您的帮助。:)您好@EJ2015现在我看了您的答案,我明白我做错了什么,因为我仍在学习,我必须逐行检查,并写下每一行都在做什么(让您了解我的水平)。从您的评论中,我现在唯一不确定的是最后一部分,您说“您还应该将保存的发型查询移动到帮助器方法”。您的意思是什么,为什么?先谢谢你。p、 s我已经实现了你的代码,它似乎正在运行,我只是有专家宝石阻止正在执行的行动,所以我现在必须整理出来。太好了。我最后的观察只是提醒你,一旦你让事情运行起来,别忘了重构
app/helpers
通常是你可以放置你的小视图助手来清理你的模板的地方。好的,我明白了,我不知道,但这很有意义。再次感谢您的帮助。:)

plusCircle = document.getElementById("bookmark");
plusCircle.innerHTML = `<%= link_to  '#', method: :post do %>
                    <i class="fas fa-plus"></i>
                 <% end %>`

   <div class="bookmark">
      <% saved_hairstyle = SavedHairstyle.find_by(user: current_user, hairstyle: hairstyle.id) %>
      <% if saved_hairstyle %>
        <%= link_to saved_hairstyle_path(saved_hairstyle), method: :delete do %>
           <i class="fas fa-plus-circle"></i>
         <% end %>
       <% else %>
          <%= link_to  hairstyle_saved_hairstyles_path(hairstyle), method: :post do %>
            <i class="fas fa-plus"></i>
          <% end %>
        <% end %>
    </div>