【发布时间】:2019-08-24 16:47:27
【问题描述】:
我正在创建一个非常简单的 StackOverflow 类型的网站 用 Ruby on Rails 编写。我在问题控制器中创建了四个操作,其中之一是 'Create'。
我在视图页面 index.html.erb 中继续,并创建了一个 simple_form,我从用户那里获得 input(question)。
我收到一个错误(NoMethodError in Questions#index..undefined method `[]' for nil:NilClass)
问题属于 current_user,我认为这可能是问题所在。我想也许我需要再初始化一个变量才能让我的表单正常工作。
谁能告诉我我在这里缺少什么?
提前谢谢你!
class QuestionsController < ApplicationController
def index
@questions = Question.all
end
def show
@question = Question.find(params[:id])
end
def new
@question = Question.find(params[:user_id])
@question = Question.new
end
def create
@question = Question.new(accepted_params)
if @question.save
redirect_to questions_show_path, notice: 'Question submitted'
else
@question = Question.find(params[:id])
render :new
end
end
<%= simple_form_for @questions, @user do |f| %>
<%= f.input :title %>
<% f.input :content %>
<%= f.submit :submit, class: 'btn btn-secondary'%>
<% end %>
【问题讨论】:
-
我认为问题出在
simple_form_for的第二个参数上。您想要的是可以解析为 URL 的东西。@user如果不是 nil 就可以工作......因为 Rails 可以从 ActiveRecord 对象中创建一个 url。因此,在这种情况下,您可能需要将 @user 设置为 User 模型......或者使用例如url: my_named_route_path作为第二个选项。还要确保使用非零实例变量来包装表单。所以我认为@questions应该是@question来自您的new操作。 -
好吧,我考虑了一下,然后我输入了
@user = User.find(params[:current_user]),因为我使用 devise gem 来使用它登录的当前用户。因为 devise,所以更加混乱。我尝试了路径,但也没有用。
标签: ruby-on-rails