【问题标题】:RoR: How to define a method for a partial?RoR:如何为部分定义方法?
【发布时间】:2020-07-28 19:48:00
【问题描述】:

我正在尝试在页面上呈现部分内容......就像这样

../devise/sessions/new.html.erb

<%= render partial: '/tweets/latest_tweets' %>

一切顺利

在部分我想做“每个都做”这样......

../tweets/_latest_tweets.html.erb

<% @tweets.each do |tweet| %>
 <%= tweet.content %>
<% end %>

我得到 nil:NilClass 的未定义方法 `each'

如何在我的推文控制器中为我的部分定义此方法?

我有这样的索引

tweets_controller.rb

    def index
        @tweets = Tweet.all
    end

这对索引很好,但我不知道如何对我的部分做同样的事情(我尝试像索引一样定义我的部分,但似乎不起作用)

谁有我可以尝试的解决方案?

ty

【问题讨论】:

  • 您是否在文件 devise/sessions/new.html.erb 中获得了@tweets?您可以使用调试器或 binding.pry 进行检查吗?

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


【解决方案1】:

渲染部分时需要传递集合。它会给出这样的结果:

设计/会话/new.html.erb

<%= render partial: 'tweets/latest_tweets', collection: @tweets, as: :tweet %>

tweets/_latest_tweets.html.erb

<%= tweet.content %>

就这样,它会自动遍历你的集合。

更多信息,请阅读Rails - Layout and Rendering

【讨论】:

  • @tweets 的内容是什么?你确认数据库中有推文吗?
  • 是的,有很多推文但没有显示。我有“验证用户!”在索引控制器上 - 可能与此有关?
  • 奇怪,它根本不渲染部分,与循环无关
  • @davidm 好的,我明白为什么了!您正在 TweetsController#index 中填充 @tweets,但您正试图在 Devise::SessionsController#new 中呈现它们。如果您希望在该视图中呈现推文,您需要覆盖 Devise::SessionsController 中的 #new 方法以填充 @tweets
  • 谢谢。我正在考虑反过来做。设置一个新页面并在该页面中嵌入登录表单可能会节省很多麻烦!
猜你喜欢
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多