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
私は編集ユーザーページに2つのフォームがあります。メインユーザー属性を更新するものと、正常に動作するものがあります。以下に示されていない)、そして、ユーザがattを更新することを可能にするこの"current_location_text"と呼ばれるロケーションモデルのリルート:
<%= 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 %>
これは機能しません。フォームから送信されたパラメータが正しく表示されないので、私は少し混乱します。フォームが送信されると、これは、ログにあります。私はこのことについて奇妙な見つける
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
2つのこと:
あり、「COMMIT」のメッセージだ、ない前の更新文字列を持つ、とエラーはありません。例えば、あなたがプロテクトされたアトリビュートをコミットしようとすると、その時点で "あなたはマスを割り当てることはできません"というエラーメッセージが表示されます。
paramsは私に間違って見えます。 「場所」ビットは、私が期待するようにネストされていますが、私はまた、これは、「ユーザー」のハッシュ内にネストされることを期待したい、このような何か:私は考えていない
{"utf8"=>"✓", "authenticity_token"=>"YdTAsXwEvRgXIqri+jfx3dLlYG2XWQTuYkgLDsO/OJw=", "user"=>{"location"=>{"current_location_text"=>"E14 8JS"}, "commit"=>"Update Current Location", "id"=>"1"}}
私はここでは完全に馬鹿だ。本当に明白な何かが欠けていますか?私は私のフォームに余分な隠しフィールドを追加しようとしました、つまりユーザーIDですが、私はユーザーハッシュを取得しますが、 "location"ハッシュと同じレベルで、
DEF @user = User.find([:ID]のparams)更新:ここ
if @user.update_attributes(params[:user])
redirect_to current_user, :notice => 'User was successfully updated.'
else
render :action => "edit"
end
エンド
をしています、それは場合に役立ちます
また、ここに私がUserController内の私の更新です私のルートには何が入っているのですか(それは関係ないと思いますが):
resources :users do
resource :location
end
何か助けに感謝します。私がこれを解決しなければ、ラップトップは窓から外に出ています.... ありがとう。
ドキュメントの参照先私が言うことがわかるのは、 '<% -%>'は末尾の空白を扱うということです。 (http://api.rubyonrails.org/classes/ActionView/Base.html) – 0112
明確にするために、問題は 'fields_for'と' f.fields_for'でした。 ' - %>'はちょうど習慣でした。 –