2017-05-09 19 views
0

我很难找出这个错误来自哪里...试图让用户选择在我的Rails 5应用程序中更改一些细节。代码正在工作,这是最令人沮丧的部分。它正在工作,它更新数据库,但它也会抛出一个“未定义的方法`[]'nil:NilClass”错误。未定义的方法`[]'为零: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 %> 

这里是在控制器中的“新”的动作,同样的代码在“更新”以及:

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 

我的数据库有一个设置表,其中“site_name”和“location”为两列。

以下是完整的错误:

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 

什么我在两者的表格中输入被添加到数据库,无论错误,因此它看起来像代码工作的权利,但它仍然抛出一个错误。我错过了什么?

+0

你好,你能不能也发布你的更新方法? – Jeremie

+0

它在哪一行发生错误? –

+0

是的,错误的完整痕迹将有所帮助 – Jeremie

回答

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 

不知道为什么有一个错误,但只要它工作,我很高兴。

相关问题