【发布时间】:2016-04-26 15:23:48
【问题描述】:
是否可以为我作为搜索结果获得的每个用户从共享部分呈现表单?
所以当我搜索adam 时,我会得到类似的信息:
Adam1 [跟随形式]
Adam2 [跟随形式]
Adam3 [跟随形式]
其中follow form是一个follow button,它保存了与数据库的关系,所以每个button都必须正确发送一个对应的user id。 以下所有机制等都正常工作,您可以在访问用户的个人资料时关注用户,但我现在实现了对用户的搜索,并且在获得结果时,我还希望表单位于每个结果旁边。
我相信我需要做的事情是这样的:
<% for result in @results do
render result
render follow_form
%>
或
<% @results.each do |f|
render f
render follow_form for f
%>
但我不确定该怎么做。 即使我设法呈现用户,我也无法在他们旁边呈现表单。由于某种原因,@user 容器为零。
这些是搜索控制器的文件和共享表单:
class SearchController < ApplicationController
def search
query = "%#{params[:query]}%"
@users = User.where("name LIKE ? ", query)
end
end
搜索视图
<%= render 'shared/search_bar' %>
<ul class="users follow">
<%= @users.each do |f| %>
<%= render f %>
<%= render 'shared/endorse_form' if logged_in? %>
<% end %>
</ul>
在此处的视图 /\ 中,渲染器 f 正确渲染了用户,但也渲染了一些看起来像数据库转储的东西,位于包含用户数据的结果下方。当我添加render shared/endorse_form 时,我收到关于空类undefined methodid' for nil:NilClass` 的错误
在如下所示的 follow(endorse) 表单的第 2 行中:
<%= form_for(current_user.active_endorsements.build, remote: true) 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 %>
如何处理?任何帮助将不胜感激。
【问题讨论】:
-
它呈现“类似于数据库转储的东西”的原因是
<%= @users.each do |f| %>输出@users.each的返回值,each返回它的被调用者,即@users。也就是说,除了循环内的所有内容之外,您还打印了@users对象本身,因为这是each返回的内容。要解决此问题,请将该行上的<%=更改为<%。 -
@Jordan 谢谢乔丹!你说的有道理!这是一个值得记住的好提示!好的,所以我已经修复了“转储”,只需留下为每个相应用户正确呈现表单,以便“认可”按钮工作并发送正确的数据:(
标签: ruby-on-rails ruby partials