Ruby on rails Rails视图中存在未定义的方法错误(没有其他解决方案解决此问题)
先谢谢你 我有一个非常基本的rails应用程序,它接受来自表单的用户输入,并将其显示在show视图中 我正在将重定向_中的对象ID传递到显示页面。show页面抛出了一个错误,我不知道为什么。为什么实例变量@questions不能使用EACH方法?(@show-action中的问题)-解决相同错误的其他答案与此特定情况无关。错误如下:Ruby on rails Rails视图中存在未定义的方法错误(没有其他解决方案解决此问题),ruby-on-rails,Ruby On Rails,先谢谢你 我有一个非常基本的rails应用程序,它接受来自表单的用户输入,并将其显示在show视图中 我正在将重定向_中的对象ID传递到显示页面。show页面抛出了一个错误,我不知道为什么。为什么实例变量@questions不能使用EACH方法?(@show-action中的问题)-解决相同错误的其他答案与此特定情况无关。错误如下: Completed 500 Internal Server Error in 7ms ActionView::Template::Error (undefined
Completed 500 Internal Server Error in 7ms
ActionView::Template::Error (undefined method \`each' for #<Question:0x007fcff50ac950>):
1: <div class="flash_notice">flash[:notice]</div>
2: <% @questions.each do |q| %>
3: <%= q.answer %>
4: <% end %>
app/views/questions/show.html.erb:2:in \`_app_views_questions_show_html_erb__4078795064500088796_70265573096080'
Rendered /Users/iMR-CEO/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.2ms)
Rendered /Users/iMR-CEO/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /Users/iMR-CEO/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (12.6ms)
新视图:
class QuestionsController < ApplicationController
def index
@questions = Question.all
end
def new
@question = Question.new
@ques1 = "What is the most important business development task you can focus on right now?"
end
def edit
@question = Question.find(params[:id])
end
def show
@questions = Question.find(params[:id])
end
def update
@question = Question.find(params[:id])
if @question.update_attributes(question_params)
flash[:notice] = 'message'
redirect_to(:controller => 'home', :action => 'index')
else
render("edit")
end
end
def create
@question = Question.new(question_params)
if @question.save
flash[:notice] = 'Answer Stored.'
redirect_to(:action => 'show', :id => @question.id)
else
redirect_to(:action => 'index')
end
end
def delete
@question = Question.find(params[:id])
end
def destroy
@question = Question.find(params[:id]).destroy
flash[:notice] = "Deleted Action - Nice job"
redirect_to(:action => 'new')
end
private
def question_params
params.require(:question).permit(:answer, :question_id)
end
end
<div class="flash_notice">flash[:notice]</div>
<% @questions.each do |q| %>
<%= q.answer %>
<% end %>
Rails.application.routes.draw do
#get 'home/index'
#get 'home/edit'
#get 'home/delete'
#get 'home/show'
root 'home#index'
#get 'index' => 'questions#index'
#get 'questions/edit'
#get 'new' => 'questions#new'
#get 'questions/delete'
#post 'questions/destroy'
#get 'questions/show'
#post 'create' => 'questions#create'
match ':controller(/:action(/:id))', :via => [:get, :post]
<%= form_for(@question, :url => {action: "create"}) do |f| %>
<%= f.label(:question, "Question:") %></br>
<%= @ques1 %></br></br>
<%= f.label(:question, "Answer Below") %></br>
<%= f.text_area(:answer) %></br>
<%= f.submit "Answer" %>
<% end %>
</br>
<div align="center"><%= link_to("Home", :action => 'index') %></div>
{action:“create”})do | f |%>
“索引”)%%>
在show
视图中,您试图将@questions
变量视为类似数组的对象,但它不是数组。您可能只想这样做:
<%= @question.answer %>
在
show
视图中,您试图将@questions
变量视为类似数组的对象,但它不是数组。您可能只想这样做:
<%= @question.answer %>
show
操作中的@questions
变量包含单个问题对象,而不是数组。ActiveRecord中的find
方法将返回单个实体,如果找不到匹配项,则会引发异常
这与ActiveRecord中的.all()
方法不同(例如在索引
操作中),该方法返回一个问题数组,如果没有找到,则返回一个空数组
由于
each
方法属于,因此当代码尝试调用问题对象而不是数组对象上的each
时会引发异常。show操作中的@questions
变量包含单个问题对象而不是数组。ActiveRecord中的find
方法将返回单个实体,如果找不到匹配项,则会引发异常
这与ActiveRecord中的.all()
方法不同(例如在索引
操作中),该方法返回一个问题数组,如果没有找到,则返回一个空数组
由于
each
方法属于,因此当代码尝试调用问题对象而不是数组对象上的each
时,会引发异常。更改您的操作,如下所示:
def show
@question = Question.find(params[:id])
end
def show
@questions=Question.find(参数[:id])
显示视图:
<div class="flash_notice">flash[:notice]</div>
<%= @question.answer %>
flash[:注意]
像这样改变你的态度:
def show
@question = Question.find(params[:id])
end
def show
@questions=Question.find(参数[:id])
显示视图:
<div class="flash_notice">flash[:notice]</div>
<%= @question.answer %>
flash[:注意]
在控制器中,将动作@questions
变量显示为类似数组的对象,但不是数组。当您使用该@questions时。在显示视图页面中的每个都会迭代@questions
对象键和值对。更改代码如下:
def show
@question = Question.find(params[:id])
end
def show
问题控制员
def show
@question = Question.find(params[:id])
end
显示视图:
<div class="flash_notice">flash[:notice]</div>
<%= @question.answer %>
flash[:注意]
在控制器中,将动作@questions
变量显示为类似数组的对象,但不是数组。当您使用该@questions时。在显示视图页面中的每个都会迭代@questions
对象键和值对。更改代码如下:
def show
@question = Question.find(params[:id])
end
def show
问题控制员
def show
@question = Question.find(params[:id])
end
显示视图:
<div class="flash_notice">flash[:notice]</div>
<%= @question.answer %>
flash[:注意]
试试这个:
显示视图:
<div class="flash_notice"><%= flash[:notice] %></div>
<%= @questions.answer %>
试试这个:
显示视图:
<div class="flash_notice"><%= flash[:notice] %></div>
<%= @questions.answer %>
问题。find
返回一条记录,而不是一个集合,因此在show视图中,您试图迭代单个对象。这就是错误。理解-那么,在显示页面上显示以新表单创建的对象的正确方式是什么?我正在收集:您不能使用each方法,因为show操作(question.find)只引用一条记录,而不是一个集合。那么,要显示一条记录,视图上会显示什么?也将进行研究。。但您会使用什么?Question.find
返回一条记录,而不是一个集合,因此在show视图中,您尝试迭代单个对象。这就是错误。理解-那么,在显示页面上显示以新表单创建的对象的正确方式是什么?我正在收集:您不能使用each方法,因为show操作(question.find)只引用一条记录,而不是一个集合。那么,要显示一条记录,视图上会显示什么?也将进行研究。。但是你会用什么?谢谢你。现在我明白了。我从来没有想过这个问题。find只查找一条记录,而each方法只涉及到有很多记录的情况。@RyanBigg对此表示感谢。现在我明白了。我从来没有想过这个问题。find只查找一条记录,而each方法只涉及到有很多记录的情况。@RyanBigg肯定是这样。谢谢你。正如我在上面的评论中所说,我甚至没有想到每一张唱片都会引用一张以上的唱片。谢谢你。正如我在上面的评论中所说的,我甚至没有想到每一张唱片都会引用一张以上的唱片。是的,这肯定会奏效。现在我明白了!谢谢你的回复。是的,这肯定会有用的。现在我明白了!谢谢你的回复。谢谢@Scottxu:)非常感谢你的时间。谢谢@Scottxu:)非常感谢你的时间。谢谢它,@KishorMohan-谢谢你的时间!谢谢你,@KishorMohan-谢谢你的时间!