出现错误 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
我试图从控制器方法中传递一些字符串来查看,但它给出了错误 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