出现错误 ActionView::Template::Error(nil:NilClass 的未定义方法“each”)

Getting error ActionView::Template::Error (undefined method `each' for nil:NilClass)

我试图从控制器方法中传递一些字符串来查看,但它给出了错误 ActionView::Template::Error(nil:NilClass 的未定义方法“each”):

这些是我试过的代码:

ApplicationController.rb

class ApplicationController < ActionController::Base
private
    def baconipsum
        @baconipsum ||= Faraday.new("https://baconipsum.com/") do |f|
          f.response :json
        end
      end
end

ArticlesController.rb

def show_Data
    #@count = params[:count]
    @bacon = baconipsum.get("api/", type: 'all-meat',paras: 2).body
end

_show_data.html.erb

<% @bacon.each do |meat| %>
  <p><%= meat %></p>
<%end%>

在这里,我尝试让用户输入他想要生成多少段,然后我会将其值传递给控制器​​ show_data,以便 Faraday 为其生成该段数

这是我的表单视图

_form_data.html.erb

<%= form_for:article do %>
    <label for="value">Value</label>
    <%= text_field_tag :value %>
    <%= submit_tag "Submit" %>
<% end %>
# config/routes.rb
get "articles/show_data", to: "articles#show_data"

# app/controllers/articles_controller.rb
def show_data
  @bacon = baconipsum.get("api/", type: 'all-meat',paras: 2).body
  # NOTE: this action will `render "show_data"` by default
end                                        # |
                                           # |
# app/views/articles/show_data.html.erb <----'
<% @bacon.each do |meat| %>
  <p><%= meat %></p>
<% end %>

要查看结果,请转到 http://localhost:3000/articles/show_data

更新

# app/controllers/articles_controller.rb
def show_data
  @bacon = baconipsum.get("api/", type: 'all-meat',paras: 2).body
end

def show
  @article = Article.find(params[:id])
  show_data # this will set `@bacon` variable
end
<!-- app/views/articles/_show_data.html.erb -->
<% bacon.each do |meat| %>
  <p><%= meat %></p>
<% end %>

<!-- app/views/articles/show.html.erb -->
<%= render "articles/show_data", bacon: @bacon %>

更新 2

将表单提交到 ArticlesController#show 操作:

<%= form_for :api_options, url: "/articles/1", method: :get do |f| %>
  <%= f.label :paras %>
  <%= f.text_field :paras %>

  <%= f.submit %>
<% end %>

ArticlesController#show 调用 show_data 方法。提交的表单参数可通过控制器中的 params 方法获得:

def show_data
  @bacon = baconipsum.get(
    "api/",
    type: 'all-meat',
    # NOTE: use `fetch` method and set some defaults when params are not present.
    paras: params.fetch(:api_options, {}).fetch(:paras, 1)
  ).body
end

https://guides.rubyonrails.org/action_controller_overview.html#methods-and-actions

https://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action