Rails ActiveRecord игнорирует параметры и сохраняет нулевые данные - PullRequest
0 голосов
/ 25 февраля 2012

Это ставит меня в тупик;По какой-то причине БД сохраняет запись с полями ноль вместо моих параметров.Может кто-нибудь помочь мне понять, почему ActiveRecord не использует мои параметры?

Миграция базы данных:

class CreateRoutes < ActiveRecord::Migration
  def change
    create_table :routes do |t|
      t.integer :user_id
      t.string  :start_address
      t.string  :end_address
      t.text    :waypoints
      t.text    :schedule
      t.integer :duration

      t.timestamps
    end
    add_index :routes, :user_id
  end
end

route.rb:

class Route < ActiveRecord::Base
  attr_accessor :start_address, :end_address, :waypoints, :schedule, :duration
  belongs_to :user
  #serialize :waypoints, :schedule

  validates :user_id, presence: true
  validates :start_address, presence: true
  validates :end_address, presence: true
  validates :schedule, presence: true
  validates :duration, presence: true, numericality: { only_integer: true, greater_than: 0 }

end

rout_controller.rb:

class RoutesController < ApplicationController
  .
  .
  .
  def create
    logger.debug "\n\n*** #{params[:route]} ***"

    @route = current_user.routes.build(params[:route])

    logger.debug "*** The route is #{@route.inspect} ***\n\n"

    if @route.save
      flash[:success] = "Route saved!"
      redirect_to user_path(current_user)
    else
      render 'new'
    end
  end
  .
  .
  .
end

выход регистратора:

*** {"start_address"=>"123 Sample St.", "end_address"=>"321 Elpmas St.", "waypoints"=>"None", "schedule"=>"Mondays", "duration"=>"15"} ***
*** The route is #<Route id: nil, user_id: 1, start_address: nil, end_address: nil, waypoints: nil, schedule: nil, duration: nil, created_at: nil, updated_at: nil> ***

1 Ответ

3 голосов
/ 25 февраля 2012

attr_accessor s перезапишет средства доступа, сгенерированные ActiveRecord, в результате чего они не будут сохранены в БД - они будут похожи на старые старые свойства / члены Ruby вместо мета-запрограммированной магии ActiveRecord.

Свойства БД (постоянные свойства) могут иметь такие вещи, как attr_accessible.

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