1

Ich habe folgende Modellstruktureine attr_writer auf einer verschachtelten asstribute Vermögenswert von einer über Form uplaoded Datei zugreifen

class Asset < ActiveRecord::Base 
    attr_writer :session_user_id 
    ... 
end 

class Item < ActiveRecord::Base 
    has_many :assets, :as => :assetable, :dependent => :destroy 
    ... 
end 

und will die user_id in dem Wert setzen Zusammenhang mit einem Vermögenswert. Ich habe ein Problem beim Zuordnen einer Variablen zu einer aktualisierten Datei. Hier sind die post'd Daten:

"assets_attributes"=>{"3"=>{"asset"=>#<ActionDispatch::Http::UploadedFile:0x007fd04dde17f8 @original_filename="nautugly.jpg", 
@content_type="image/jpeg", 
@headers="Content-Disposition: form-data; name=\"menu_item[assets_attributes][3][asset]\"; filename=\"nautugly.jpg\"\r\nContent-Type: image/jpeg\r\n", 
@tempfile=#<File:/var/folders/94/slp2488s6nvgg8qq0g0p5c0m0000gn/T/RackMultipart20120323-51480-1lpa754>>, 
"description"=>""},... 

und möchte auf eine session_user_id in Asset zugreifen. Im items_controller habe ich hinzugefügt:

params[:item][:assets_attributes].each_with_index do |value, key| 
    value.each do |y| 
    y.asset.session_user_id=12 
    end 

aber ich bekomme Fehler msg:

undefined method `asset' for "3":String 

Ich fühle mich wie ich jede Variation ausprobiert habe. Irgendwelche Ideen wie man das zum Laufen bringt?

thx

Antwort

0

Ich vermute, hier aber wie über Werte statt each_with_index verwenden.

params[:item][:assets_attributes].values do |y| 
    y.asset.session_user_id=12 
end 
+0

hmm ... das scheint nicht zu funktionieren. Ich versuche nur, die user_id associated mit dem Asset zu bekommen. Sollte nicht so schwer sein – timpone

0

Also, es gibt ein paar Dinge.

Zuerst each_with_index angerufen Hash geben Sie die object then the index. Seit Hash defines each as an enumerable with two variables erhalten Sie key die value.

params[:item][:assets_attributes].each_with_index do |attr1, attr2| 
    puts attr1 # ["3", {"asset" => "MyAsset!"}] 
    puts attr2 # 0 

    attr1.each do |value| 
    puts value 
    # "3" on First Run 
    # {"asset" => "MyAsset!"} on Second Run 
    end 
end 

Also, wenn Sie nur mit den Werten zu verwirren wollen, dann schlage ich natedavisolds' Ansatz. Aber das führt uns zu unserem zweiten Problem. Zugriff auf eine Hash; Sie müssen es mit Klammern [] nicht Methodenaufrufe tun.

Alles in allem etwa so aussehen sollte,

params[:item][:assets_attributes].values.each do |y| 
    y[:session_user_id] = 12 
end 
+0

thx für die Antwort, das macht Sinn, aber es funktioniert einfach nicht :-(Ich benutze Büroklammer. Vielleicht versuchen Sie mit keinem Asset? – timpone

+0

Ich las Ihre Frage erneut, ich dachte "Asset" war ein Embedded Ich merke jetzt, dass es sich eigentlich um ein Attribut eines "Assets" handelt. Sie würden also [: Asset] einfach vom Hash-Index streichen. – Azolo

Verwandte Themen