【问题标题】:Ruby on Rails: implementing search and other. Missing template errorRuby on Rails:实现搜索和其他。缺少模板错误
【发布时间】:2016-01-19 17:41:09
【问题描述】:

我已经使用“like twitter”应用程序遵循了 RoR hartl 教程,我想对其进行一些修改,实现搜索栏以搜索具有给定名称的用户,并将关注/取消关注选项“更改”为背书系统,一个用户可以背书另一个用户,一个月可以背书3次,但不能每个月背书两次。

现在遇到一些问题。访问用户个人资料页面时,会出现背书表单,您可以为他背书并删除背书。 但是当我使用主页上的搜索栏时,我得到:

缺少部分搜索/_endorse_form、application/_endorse_form with

我有部分:

shared/_endorse_form.html.erb

<% unless current_user?(@user) %>
  <div id="endorse_form">
  <% if current_user.endorsing?(@user) %>
    <%= render 'shared/unendorse' %>
  <% else %>
    <%= render 'shared/endorse' %>
  <% end %>
  </div>
<% end %>

shared/_endorse.html.erb

<%= form_for(current_user.active_endorsements.build) do |f| %>
  <div><%= hidden_field_tag :endorsed_id, @user.id %></div>
  <%= f.submit "Endorse", class: "btn btn-primary" %>
  <%= f.text_field :comment, class: 'form-control' %>
<% end %>

shared/_unendorse.html.erb

<%= form_for(current_user.active_endorsements.find_by(endorsed_id: @user.id),
             html: { method: :delete }) do |f| %>
  <%= f.submit "Remove endorse", class: "btn" %>
<% end %>

现在关于搜索控制器:

class SearchController < ApplicationController

  def search
    query = "%#{params[:query]}%"
    @users = User.where("name LIKE ? ", query)
  end

end

和观点:

<%= render 'shared/search_bar' %>
<ul class="users follow">
  <%= render @users %>
</ul>
<%= will_paginate %>

就是这样,我想要共享文件夹中的部分内容,这样我就可以在“所有用户”之类的页面上或在搜索用户时呈现它们,这样它就可以出现在搜索结果等旁边。希望你明白这一点.

现在,当我将共享部分移动到假设用户视图文件夹并从渲染中删除 'shared/' 时,搜索工作,但我不能获取 部分显示在搜索结果旁边并出现错误:

nil:NilClass 的未定义方法 `id'

Extracted source (around line #2):

<%= form_for(current_user.active_endorsements.build) do |f| %>
  <div><%= hidden_field_tag :endorsed_id, @user.id %></div>
  <!-- not sure about the current_user.id!!!!!!!!!!1 -->
  <%= f.submit "Endorse", class: "btn btn-primary" %>
  <%= f.text_field :comment, class: 'form-control' %>
<% end %>

我当然觉得我错过了一些重要的东西。。有人知道如何正确解决这个问题吗?

最好的问候, 赫尔班

【问题讨论】:

  • 渲染局部的main页面代码是什么?
  • @ahmadhamza 主页?您的意思是向用户展示的页面,即 users/show.html.erb ?
  • 你在问题​​里说But when I use the search bar from the main page, i get:
  • @ahmadhamza 它位于 static_pages/home 中,它还为登录或未登录的用户呈现部分内容,它们位于同一个 static_pages 目录中。 &lt;%= render 'static_pages/logged_in_home' %&gt; 部分呈现搜索栏,如:&lt;%= render 'shared/search_bar' %&gt; 还有一些 html,如 &lt;section class="user_info"&gt; &lt;%= render 'shared/user_info' %&gt; &lt;/section&gt;
  • 我在问您为在主页中呈现这些部分而编写的代码是什么?我需要检查代码。可能是你没有写正确的路径?

标签: ruby-on-rails ruby partials


【解决方案1】:

我看到了代码。 文件app/views/users/show.html.erb 显示template missing。部分路径错误。

<%= render 'endorse_form' if logged_in? %>

但应该是的

<%= render 'shared/endorse_form' if logged_in? %>

如果您从another folder 调用部分,则需要在render 中提及folder name

所以在这里,您从user 文件夹调用部分shared 文件夹。

希望你明白了。

【讨论】:

  • 如果有帮助,请将其标记为正确答案。 (那个滴答声)
  • 谢谢,但那是因为我实际上推送了错误的代码,是的,我知道这一点,并且知道它应该是什么样子。我真正遇到的问题是&lt;div&gt;&lt;%= hidden_field_tag :endorsed_id, @user.id %&gt;&lt;/div&gt; 为@user 变量返回undefined method `id' for nil:NilClass。 @users 变量包含搜索结果,每个找到的用户。在 hidden_​​field_tag 的背书部分的 form_for 中,我需要传递 endorsed_id (给谁)和 user.id (来自谁 - 当前登录的用户)。所以我希望@user.id 包含搜索中显示的每个用户的 id,具体取决于点击
  • 我在这里遗漏了一些东西,我不知道是什么。在搜索结果中,我想渲染所有搜索结果,渲染每个用户,并在用户旁边渲染背书表单,根据我按下的按钮,正确的@user.id(点击的用户id)将被发送。所以假设字符串“adam”将找到 4 个名为 adam1-4 的用户,以及他们旁边的 4 个按钮,但每个按下的按钮都会发送正确的 id - 对应于按钮旁边的用户的 id。希望你理解
  • 你想在那个隐藏字段中登录用户ID吗?
  • (对于任何模组阅读 - 对垃圾邮件感到抱歉)我相信它需要为每个类似的东西完成。为用户(所有显示的结果)中的每个用户(显示的结果)呈现背书表单。但我认为这会在访问特定用户个人资料时破坏表单,我希望表单在您还访问用户个人资料时也可用,而不仅仅是在搜索结果中。编辑:endorsed_id(获得认可的人)和登录用户(给予认可的人)
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多