Mam jednostkę użytkownika, która ma pole Bieżąca lokalizacja (miasto i kraj). Aby przechowywać te informacje, utworzyłem encję o nazwie Location, która ma wielu użytkowników.Ruby na szynach: Zagnieżdżone atrybuty, belongs_to relacja
Nie jestem do końca pewien, czy powinienem wstawić model użytkownika "has_one" lub "belongs_to", ale dla tego, co przeczytałem, gdybym chciał, aby miał klucz obcy lokalizacji, powinienem umieścić "belongs_to". Chcę także móc edytować bieżącą lokalizację użytkownika podczas edycji użytkownika. więc używam atrybutów zagnieżdżonych. Ale kiedy edytuję użytkownika, za każdym razem dodam nową lokalizację, nigdy nie kojarząc jej z edytowanym użytkownikiem. Czy możesz mi pomóc?
Mój kod jest następujący:
#User Model
class User < ActiveRecord::Base
## Relationships
belongs_to :current_location, :class_name => 'Location'
accepts_nested_attributes_for :current_location
end
#Location Model
class Location < ActiveRecord::Base
#Relationship
has_many :users
end
# part of the _form_edit.haml
- form_edit.fields_for :current_location do |location_form|
= location_form.label :location, "Current Location"
= location_form.text_field :location
#Application Helper
#nested attributes for user and location
def setup_user(user)
returning(user) do |u|
u.build_current_location if u.current_location.nil?
end
end
#in the user controller (added after edit)
def update
@user = @current_user
if @user.update_attributes(params[:user])
flash[:notice] = "Account updated!"
redirect_to account_url
else
render :action => :edit
end
end
A w kontrolerze, który zapisuje dane, co masz? –
mam: def aktualizować @user = @current_user jeśli @ user.update_attributes (params [: użytkownika]) błysku: "Konto aktualizowane" [Zawiadomienie] = redirect_to account_url else render: action =>: edit koniec koniec – simaob