【问题标题】:Rendering partials failing in rails 4在 Rails 4 中渲染局部失败
【发布时间】:2014-03-21 18:03:47
【问题描述】:

这是我尝试在用户登录时呈现的部分视图

<div class='row'>

发布项目

<% form_for @project do |f| %>
<%= f.text_field :title, class:'form-control' %>
<%= f.text_area :brief, class: 'form-control' %>
<%= f.submit "Post" %>
<% end %>

在我尝试调用部分的主视图中,没有错误,但部分不呈现

<div class='col-lg-6'>
    <% if current_user %>
        <% render 'projects/new_project' %>
    <% end %>
</div>

这是我的 current_user 方法,在应用程序控制器中定义。我还将它定义为在视图模板中使用的辅助方法。

private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  helper_method :current_user

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    要渲染,需要使用&lt;%=...输出render的返回值:

    <%= render 'projects/new_project' %>
    

    erb 标记中的表达式仅在没有等号的情况下进行评估。为了显示表达式的结果,您需要包含等号;将您的代码放入&lt;%=...%&gt;

    同样,为你form_for拨打:

    <%= form_for @project do |f| %>
    ...
    <% end %>
    

    【讨论】:

    • 谢谢我解决了这个问题,现在它渲染了 h1 但仍然不是表单。
    • form_for 的规则相同,即&lt;%= form_for... %&gt;
    【解决方案2】:

    您需要了解&lt;%= 是一个输出标签

    这意味着每次您想在非原生 Ruby 文件(.erb 等)中输出某些内容时,您都必须使用 &lt;%=

    这与&lt;%相反,它不输出任何内容,但仍执行您指定的功能


    部分

    另外,您需要确保部分语法正确:

    #app/views/controller/you_view.html.erb
    <%= render partial: "projects/new_project" %>
    
    #app/views/projects/_new_project.html.erb
    <%= form_for @project do |f| %>
        <%= f.text_field :title, class:'form-control' %>
        <%= f.text_area :brief, class: 'form-control' %>
        <%= f.submit "Post" %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 2013-06-20
      • 2013-07-24
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多