Bir has_one dernek modeline accepts_nested_attributes_for kullanmaya çalışıyor ve ben iki model, bir kullanıcı ve bir konum yok :-(kesinlikle hiçbir yerdeRaylar 3.1: accepts_nested_attributes_for ve has_one ilişkilendirmesi - çalışmaz mı?
alıyorum Bir kullanıcı bir konuma sahiptir.
class User < ActiveRecord::Base
# current location
has_one :location, :dependent => :destroy
accepts_nested_attributes_for :location
end
class Location < ActiveRecord::Base
belongs_to :user
end
Düzenleme kullanıcı sayfasında iki form var.Önceki kullanıcı özniteliklerini günceller (ve iyi çalışır ve aşağıda gösterilmemiştir) ve daha sonra kullanıcının bir bağlantıyı güncellemesine izin veren "current_location_text" olarak adlandırılan konum modelinin ribute değeri:
<%= form_for(@user) do |f| %>
<%= fields_for(@user.location) do |location_fields| %>
<%= location_fields.label :current_location_text, 'Current Location' %>
<%= location_fields.text_field :current_location_text, :placeholder => 'Road, City or Postcode' %>
<% end %>
<%= f.submit "Update Current Location" %>
<% end %>
Bu çalışmaz. Formun gönderdiği params yanlış görünce biraz kafam karıştı.
var "COMMIT" mesajı yok ancak hiçbir önceki güncelleme dizeyle ve: Bu konuda tuhaf buluyorum
Started PUT "https://stackoverflow.com/users/1" for 127.0.0.1 at 2011-10-08 00:28:05 +0100 Processing by UsersController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"YdTAsXwEvRgXIqri+jfx3dLlYG2XWQTuYkgLDsO/OJw=", "location"=>{"current_location_text"=>"E14 8JS"}, "commit"=>"Update Current Location", "id"=>"1"} User Load (10.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 User Load (5.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = ? LIMIT 1 [["id", "1"]] SQL (4.4ms) BEGIN (2.5ms) COMMIT Redirected to http://localhost:3000/users/1
İki şey: form gönderildiğinde, bu günlükte olduğu hata yok. Örneğin, korumalı bir öznitelik yüklemeye çalıştıysanız, bu noktada "kitle atayamazsınız ..." hata iletisini alırsınız.
Params bana yanlış görünüyor. Böyle bir şey ben beklediğiniz gibi "konum" bit yuvalanmış, ama aynı zamanda bu bir "kullanıcı" karma içinde yuvalanmış olmasını beklersiniz:
{"utf8"=>"✓", "authenticity_token"=>"YdTAsXwEvRgXIqri+jfx3dLlYG2XWQTuYkgLDsO/OJw=", "user"=>{"location"=>{"current_location_text"=>"E14 8JS"}, "commit"=>"Update Current Location", "id"=>"1"}}
sanmıyorum Burada tamamen aptalım. Gerçekten çok açık bir şey mi eksik? Formuma ek gizli alanlar eklemeyi denedim, bir kullanıcı kimliği, ve sonra kullanıcı karma, ama "konum" karma ile aynı düzeyde ve beklediğiniz gibi bir ebeveyn olarak değil!
def @user = User.find ([: id] params) güncelleştirmek: Burada
if @user.update_attributes(params[:user])
redirect_to current_user, :notice => 'User was successfully updated.'
else
render :action => "edit"
end
uç
ve oluyor eğer yardımcı olur
Ayrıca burada benim UsersController içinde my update yollarımda ne var (ilgili olduğunu düşünmeme rağmen):
Herhangi bir yardım takdir edildi. Bunu çözmezsem, dizüstü bilgisayar pencereden dışarı çıkıyor .... Teşekkürler.
Dokümantasyon Referansı? Belgelerin tamamını görebildiğim, “<% -%>” ifadesinin boşluk ile başa çıkmak olduğunu söylüyor. (http://api.rubyonrails.org/classes/ActionView/Base.html) – 0112
Netleştirmek gerekirse, problem 'fields_for' vs' f.fields_for' idi. '-%>' sadece alışkanlıktı. –