Cette certaine partie de mon application prend soin de création de modèle de boutique en ligne pour les chaînes de magasins (comme H & M) qui en a un. Si la chaîne a un site Web qui est également une boutique en ligne, elle crée un modèle de boutique en ligne.Attributs virtuels sur les nouveaux modèles dans Rails?
Si le site Web n'est pas une boutique en ligne, il est laissé à la chaîne dans le modèle Chaîne. PROBLÈME: Je le fais avec une case à cocher et des attributs virtuels. Ainsi, lors de l'envoi d'une requête au contrôleur de chaîne, une case à cocher définit la valeur 'set_webshop'.
# Chain Model
class Chain
has_one :webshop, :dependent => :destroy
def set_webshop
self.webshop.url == self.website unless self.webshop.blank?
end
def set_webshop=(value)
if self.webshop.blank?
value == "1" ? self.create_webshop(:url => self.website) : nil
else
value == "1" ? nil : self.webshop.destroy
end
end
end
# Chain Controller
class ChainsController < ApplicationController
def create
@chain = Chain.new(params[:chain])
respond_to do |format|
if @chain.save
flash[:notice] = 'Chain was successfully created.'
format.html { redirect_to(@chain) }
format.xml { render :xml => @chain, :status => :created, :location => @chain }
else
format.html { render :action => "new" }
format.xml { render :xml => @chain.errors, :status => :unprocessable_entity }
end
end
end
def update
params[:chain][:brand_ids] ||= []
@chain = Chain.find(params[:id])
respond_to do |format|
if @chain.update_attributes(params[:chain])
flash[:notice] = 'Chain was successfully updated.'
format.html { redirect_to(@chain) }
format.js
else
format.html { render :action => "edit" }
end
end
end
end
Tout fonctionne parfaitement lors de la mise à jour d'un modèle de chaîne, mais lorsqu'ils ne sont pas lors de la création d'un nouveau? Je ne peux pas comprendre pourquoi?
Voici les requêtes POST et PUT.
# POST (Doesn't work - does not create a Webshop)
Processing ChainsController#create (for 127.0.0.1 at 2010-02-06 11:01:52) [POST]
Parameters: {"commit"=>"Create", "chain"=>{"name"=>"H&M", "set_webshop"=>"1", "website"=>"http://www.hm.com", "desc"=>"...", "email"=>"[email protected]"}, "authenticity_token"=>"[HIDDEN]"}
# PUT (Works - does create a Webshop)
Processing ChainsController#update (for 127.0.0.1 at 2010-02-06 11:09:13) [PUT]
Parameters: { "commit"=>"Update", "chain"=> { "name" => "H&M", "set_webshop"=>"1", "website" => "http://www.hm.com", "desc" => "...", "email" => "[email protected]"}, "authenticity_token"=>"[HIDDEN]", "id"=>"444-h-m"}
Existe-t-il un moyen spécial de gérer virtual_attributes sur les nouveaux modèles dans Rails?
Merci, a travaillé comme un charme! –