【问题标题】:Routing issue? Rails First argument in form cannot contain nil or be empty路由问题? Rails 表单中的第一个参数不能包含 nil 或为空
【发布时间】:2014-08-31 23:27:42
【问题描述】:

更新:我是个白痴。我将@answers 添加到用户控制器而不是问题控制器。现在我将其更改为它正在显示的问题控制器。我有提交错误,但如果我无法弄清楚,我将启动一个新线程。

我已经阅读了几十个相关问题并尝试了解决方案但没有成功。我想知道我的路由设置是否不正确。这是我得到的错误:

First argument in form cannot contain nil or be empty on line 5

这是我的表单代码。这是一个答案表格,但它显示在问题索引页面上的特定问题下。

<%= form_for @answer do |answer| %>               <<< LINE GENERATING ERROR
  <%= answer.label :answer, "What do you think?" %>
  <%= answer.text_area :answer %>
  <%= answer.button %>
<% end %>

这是我的路由信息​​:

resources :answers
get 'answers/new' => 'questions#index'
post 'answers' => 'questions#index'

这是我的 answers_controller 信息:

类 AnswersController

def index
  @answers = Answer.all
end

def new
  @answer = Answer.new
end

def create
  @answer = Answer.new(answer_params)

  if @answer.save
    redirect_to root
  else
    render 'new'
  end
end

private

def answer_params
  params.require(:answer).permit(:answer, :users_id, :questions_id)
end

【问题讨论】:

  • 听起来像是在告诉您@answer 为零 - 是吗?
  • 您希望您的表单参数进入答案控制器,那么为什么您有 get 'answers/new' =&gt; 'questions#index'post 'answers' =&gt; 'questions#index' 路由?
  • form_for 在哪里?哪个路线会导致此错误?
  • 我认为您应该将问题控制器发布到。
  • questions#index 中应该将@answer 分配给一个新的答案,否则你会得到nil 错误。

标签: ruby-on-rails


【解决方案1】:

form_for 的第一个参数不能为 nil - rails 无法告诉您要创建答案(实例变量可能称为 @answer 但 form for 不知道传递给的变量的名称它,只有值)

在这种情况下,最简单的方法是

<%= form_for Answer.new do %>
  ...
<% end %>

或者,您可以保持视图不变,并在呈现此视图的控制器中设置@answer(从事物的声音来看,这是您的 QuestionsController

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多