Какое решение для nil.update_attributes в ruby? - PullRequest
0 голосов
/ 29 марта 2011

Я не могу взломать эту ошибку.Не могу понять, почему @customer присваивается значение nil.

"У вас есть объект nil, когда вы его не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Ошибка при оценке nil.update_attributes"

фрагмент кода:

def cedit
  @title = "Edit Customer Information"
  @customer = Customer.find(params[:id])
  if request.post? and params[:customer]
    attribute = params[:attribute]
    case attribute
      when "fname"
        try_to_update @customer, attribute
      when "email"
        try_to_update @customer, attribute
      when "add"
        try_to_update @customer, attribute
    end
  end
end


private
  def try_to_update(customer, attribute)
    if customer.update_attributes(params[:customer])
      flash[:notice] = "Customer's details updated."
      redirect_to :action => "record", :controller => "c2"  
    end
  end

1 Ответ

1 голос
/ 29 марта 2011

Прежде всего, ваш код выглядит очень не по рельсам и нарушает пару лучших практик.Я настоятельно рекомендую вам прочитать официальное руководство по Rails и попытаться выяснить, можете ли вы реорганизовать какой-то код.

У меня слишком мало информации о том, что вы пытаетесь сделать в большоммасштаб вещей, поэтому я не могу дать вам полноценный ответ.Но вы, вероятно, хотите сделать что-то в этом духе.

class CustomersController < ApplicationController
  def update
    @customer = Customer.find(params[:id])
    if @customer.update_attributes(params[:customer])
      flash[:notice] = "Customer updated"
    end
    redirect_to customer_path(@customer)
  end
end

Вид может выглядеть примерно так:

<%= form_for(:customer) do |f| %>
  <%= f.text_field :fname %>
  <%= f.text_field :email %>
  <%= f.text_field :add %>
  <%= f.submit_tag "Update" %>
<% end %>

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...