未定义的方法`[]' for nil:NilClass,但无论如何都将值保存到数据库中

时间:2017-05-09 02:53:44

标签: ruby-on-rails activerecord

我很难弄清楚这个错误来自哪里...试图让用户选择更改我的Rails 5应用程序中的一些细节。代码正在运行,这是最令人沮丧的部分。它正在工作,它会更新数据库,但它也会抛出一个未定义的方法`[]'为零:NilClass"错误。

这在我看来:

<%= form_for @setting, url: {action: "new"} do |f| %> 
  <p>Site Name: <%= f.text_field :site_name %></p>
  <p>City Name: <%= f.text_field :location %></p>
  <%= f.submit %>
<% end %>

这是&#34;新&#34;控制器中的动作,相同的代码在&#34;更新&#34;以及:

def new
    @settings = Setting.first
    @settings.site_name = params[:setting][:site_name]
    @settings.location = params[:setting][:location]
    @settings.save
    redirect_to admin_url
  end

和更新控制器:

def update
    @settings = Setting.first
    @settings.site_name = params[:setting][:site_name]
    @settings.location = params[:setting][:location]
    @settings.save
    redirect_to admin_url
end

我的数据库有一个设置表,其中包含&#34; site_name&#34;和&#34;位置&#34;作为两列。

这里有完整的错误:

NoMethodError in AdminController#new
undefined method `[]' for nil:NilClass

Extracted source (around line #29):

   27 @settings = Setting.first
   28
   29 @settings.site_name = params[:setting][:site_name]
   30 @settings.location = params[:setting][:location]
   31 @settings.save

我在两个表单中输入的任何内容都会被添加到数据库中而不管错误如何,所以看起来代码工作正常,但它仍然会抛出错误。我错过了什么?

1 个答案:

答案 0 :(得分:0)

我删除了我保存的各个设置,只是让表单发挥其魔力,这是我的“新”方法正常运行。

def new
    @settings = Setting.first
    respond_to do |format|
      if @settings.save
        format.html { redirect_to admin_url, notice: 'Setting was successfully changed.' }
        format.json { render :show, status: :created, location: @settings }
      else
        format.html { render :new }
        format.json { render json: @settings.errors, status: :unprocessable_entity }
      end
    end
  end

仍然不确定为什么首先出现错误但只要它正常工作,我很高兴。