【问题标题】:Passing local variable to partial inside for each loop rails 3将局部变量传递给每个循环rails 3的部分内部
【发布时间】:2012-09-17 00:31:45
【问题描述】:

这是我渲染部分的代码(@parties 集合正在正确生成,我已经测试过了):

        <% @parties.each do |party| %>
            <div class="item">
              <%= render 'parties/party', :object => party  %>
            </div>
        <% end %>

这是部分代码:

<%= party.name %>

但是,我收到以下错误:

undefined method `name' for nil:NilClass

我无能为力,请有人帮忙:-|

另外,这是控制器渲染包含部分视图的代码(控制器称为 default_controller):

def index
    @parties = Party.all
end

这不是party_controller 有什么后果吗?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 partials


【解决方案1】:

我已经尝试了类似下面的方法并且它成功了

<%= render :partial => 'party', :object => party  %>

我可以像party.name 一样访问。局部变量以部分名称命名,此处为party

注意:我假设你的两个部分都是parties_controller。所以这应该可行。

更新: 这是我再次尝试的方法

class PostsController < ApplicationController
    #... ...
    def index
        @posts = Post.all
        @comments = Comment.all #<---- Loading comments from PostsController
        #... ...
    end  
end

#views/posts/index.html.erb

<% @comments.each do |comment| %>
    <%= render :partial=>"comments/comment", :object=>comment %>
<% end %>

#views/comments/_comment.html.erb

<%= comment.body %>

它的工作原理:)

【讨论】:

  • 虽然链接apidock.com/rails/ActionController/Base/render已被弃用,但它提供了一些很好的渲染示例。
  • 使用部分的页面没有通过party_controller 呈现 - 为什么这是个问题? (使用的控制器代码仍然使用@parties = Party.all 从数据库中获取所有参与方)
  • 我用另一个例子更新了我的帖子。这是我给出的例子的小rails项目。 goo.gl/bB9Ky。您可以自己下载并查看实际操作:)
  • 我实际上没有更改任何一行代码,只是重新启动了我的计算机,现在它可以工作了——天哪。非常感谢您抽出时间提供帮助:-)(您的解决方案正是我正在做的)
  • 哦,太好了 :) 可能需要重新启动 Rails 服务器。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 2015-12-10
  • 2011-06-09
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多