2010-10-11 22 views
0

Schéma:RoR: ActiveScaffold: Comment est-ce que je peux conditionner update_column fetaure?

action_types 
------------ 
id 
name 
description 

actions 
------- 
id 
action_type_id 
date 
description 

L'objectif est de copier action_types.description à actions.description que si elle est pas encore occupé sur l'interface utilisateur (!).

Ce qui est fait:

class ActionsController < ApplicationController 
    active_scaffold :action do |c| 
     c.columns = [ \ 
      , :date \ 
      , :action_type \ 
      , :description \ 
     ] 
     c.columns[:action_type].form_ui = :select 
     c.columns[:action_type].options[:update_column] = :description 
     c.columns[:description].form_ui = :textarea 
     c.columns[:description].options = { :cols => 40, :rows => 5} 
    end 

protected 

    def after_render_field(record, column) 
     # record: almost empty, only "action_type" is filled. 
     # column: column.name == "action_type" 
     # @params[]: id: id for the record 
     # But no data on UI state. So if the user wrote some lines into the 
     # description then it will be lost. No possibility 
     # to express "do nothing!" 
    end 

    #... 
end 

Sinon je peux accepter si nous n'avons pas cette fonctionnalité lors de « mise à jour » que sur « créer ». Ce qui est une demi-mesure, mais sera suffisant pour le moment.

Des idées?

(Rails)

2.3.4

Répondre

0

Up-voix et accepter pour eux:

http://markmail.org/message/cfbhmeyfjw3bjisp#query:+page:1+mid:vnnrbzdj7cywlvgm+state:results

Vous pouvez copier javascript_for_update_column méthode dans votre fichier d'aide, et changer :with-"Form.serialize(this.form)" (de "'value=' + this.value") .

Dans after_render_field méthode, vous pouvez utiliser:

update_record_from_params(record, active_scaffold_config.update.columns, params[:record])

Pour votre information: Les champs vides sont à venir comme nil s, et non des chaînes vides.