before_save

[code]class Test < ActiveRecord::Base
attr_accessible :data, :nazwa, :user, :uzasadnienie
before_save :stale

def stale
self.uzasadnienie = @w.to_s
end

end[/code]

[code]class TestsController < ApplicationController
def new
@w = cookies[:cookie_uz]
@site = Site.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @site }
end

end

def create
@w = cookies[:cookie_uz]
@site = Site.new(params[:site])

respond_to do |format|
  if @site.save
    format.html { redirect_to @site, notice: 'Site was successfully created.' }
    format.json { render json: @site, status: :created, location: @site }
  else
    format.html { render action: "new" }
    format.json { render json: @site.errors, status: :unprocessable_entity }
  end
end

end
end[/code]
co powinnam zrobic aby zmienna @w była inicjowana w before_save? przy podanym kodzie w momencie wykonywania before_save na modelu @w ma nil

@w to zmienna instancji kontrolera. Musisz tę wartośc jakoś przekazać do modelu

np.

[code=ruby]class Test < ActiveRecord::Base
attr_accessible :data, :nazwa, :user, :uzasadnienie
attr_accessor :w
before_save :stale

def stale
self.uzasadnienie = w.to_s
end
end

class TestsController < ApplicationController
def new
@site = Site.new
@site.w = cookies[:user_name]

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @site }
end

end

def create
@site = Site.new(params[:site])
@site.w = cookies[:user_name]

respond_to do |format|
  if @site.save
    format.html { redirect_to @site, notice: 'Site was successfully created.' }
    format.json { render json: @site, status: :created, location: @site }
  else
    format.html { render action: "new" }
    format.json { render json: @site.errors, status: :unprocessable_entity }
  end
end

end
end[/code]

dzięki za szybką odpowiedz, działa :slight_smile:

btw. uzywanie polskich nazw zmiennych/metod/klas/tabel/czegokolwiek, wczesniej czy pozniej się na tobie zemści , więc wystrzegaj się tego