未定义的方法`[]'对于nil:NilClass用于活动模型和活动记录

时间:2015-10-29 09:12:02

标签: ruby-on-rails-4

控制器

def new
  @query.query_string = params[:query][:query_string]
end

模型

def query_string=(query_str)
  @query_string = query_str
  @query_result = ActiveRecord::Base.connection.execute(query_str)
end

视图

<%= form_for @query, url: queries_new_path, method: "get" do |f| %>
<td><%= f.text_field :query_string %></td>

我刚刚展示了我的代码的abstarct.it返回undefined method '[]' for nil:NilClass

任何人都可以告诉解决这个问题的方法

1 个答案:

答案 0 :(得分:0)

回答您的初步问题:从错误看起来params[:query]返回Nil,因为您正在寻找Nil不存在的嵌套参数。要解决此问题,请尝试将for方法更改为method: "post"并创建create操作。

AJAX实施:

  1. remote: true添加到您的表单中,因此它应该类似于:

    <%= form_for @query, url: queries_new_path, method: "post", remote: true do |f| %>
    
  2. 2.在create行动中添加以下内容:

    respond_to do |format|
      format.js {}
    end
    
    1. 创建一个create.js.erb文件,您可以在其中定义ajax回调(呈现的内容,隐藏的内容等)。如果您在创建操作中执行@query.save或类似操作,则可以在视图中执行此操作:

      <% if @query.save %>
        $(".some_success_block").html("some success message")
      <% else %>
        $(".some_outter_div_around_form").html("<%= j render 'form' %>")
      <% end %>
      
    2. 这要求您有一个名为_form.html.erb的部分视图,其中包含您的表单。

      然后,您可以使用new.html.erb

      替换<%= render "form" %>中的表单

      那应该这样做。

      有关AJails in Rails的更多信息:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#an-introduction-to-ajax