1
私のユーザモデルの更新では、完全に正常に動作します... 私のプロファイルモデルで何をしても、コントローラビューのデータベースは更新されません。私のユーザーモデルでは、同じ問題がありましたが、パスワードフィールドが必要だったことがわかりました。しかし、私はプロファイルモデルに検証セットがないので、私はそうではありません。Ruby on railsはプロファイルモデルの属性を更新しません
私は何が起こっているのか分かりません。ターミナルのログは、current_user.idが見つかったことを示しています。私はその結果を使用してプロファイルテーブルのuser_idを探しています。しかし、更新は起こりません。
何が間違っている可能性がありますか?
種類が
ログ
--- &id001 !ruby/object:Profile
_already_called:
?
- :autosave_associated_records_for_user
- :user
: false
_start_transaction_state:
:id: 1
:new_record: false
:destroyed: false
:level: 1
aggregation_cache: {}
association_cache: {}
attributes:
id: 1
user_id: 1
motd: Success is guaranteed!
first_name: Foo
last_name: Bar
birthday:
star_sign:
gender:
marital_status:
sexual_preference:
racial_background:
location:
profile_url:
about_me:
height:
body_type:
eye_colour:
drugs:
alcohol:
cigarettes:
likes:
dislikes:
bad_habits:
food:
music:
television:
book:
animal:
place:
possesion:
profile_visits:
created_at: 2012-01-07 23:02:29.228500
updated_at: 2012-01-07 23:02:29.228500
attributes_cache:
birthday:
created_at: 2012-01-07 23:02:29.228500 Z
updated_at: 2012-01-07 23:02:29.228500 Z
changed_attributes: {}
destroyed: false
errors: !ruby/object:ActiveModel::Errors
base: *id001
messages: !omap
- :motd: []
- :first_name: []
- :last_name: []
marked_for_destruction: false
new_record: false
previously_changed: !map:ActiveSupport::HashWithIndifferentAccess {}
readonly: false
relation:
validation_context:
Profile updated
--- !map:ActiveSupport::HashWithIndifferentAccess
utf8: "\xE2\x9C\x93"
_method: put
authenticity_token: YZwwOx5CqfKTfsybXE4NH2o2dTg4asKZZu6QOR9Y3Zo=
profile: !map:ActiveSupport::HashWithIndifferentAccess
motd: Success is guaranteed!
first_name: Foo
last_name: Bar
commit: update
action: update
controller: profiles
id: "1"
ルート
resources :users
resources :sessions
resources :passwords
resources :profiles
root :to => "users#new"
match 'success' => "users#success"
match 'login' => "sessions#new"
match 'logout' => "sessions#destroy"
match 'reset_password' => "passwords#new"
match 'setup_new_password' => "passwords#edit"
match 'settings', :to => "users#settings"
match "/settings/account", :to => "users#account"
match "/settings/edit_profile", :to => "profiles#edit_profile"
match '/:username', :controller => 'users', :action => 'show'
モデル
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :first_name, :last_name, :motd
end
Profiles_controller
について10def new
@user = Profile.new
end
def update
@user = Profile.find_by_user_id(current_user.id)
if @user.update_attributes(params[:user])
render 'edit_profile'
flash[:success] = "Profile updated"
else
redirect_to root_path
end
end
def edit
end
def edit_profile
@user = Profile.find_by_user_id(current_user.id)
end
end
ビュー
<div id="formo"> <%= form_for @user, do |f| %>
<%= f.text_field :motd, :placeholder => "motd" %><br />
<%= f.text_field :first_name, :placeholder => "fname" %><br />
<%= f.text_field :last_name, :placeholder => "lname" %><br />
<%= f.submit 'update' %><br />
<% end %>
<%= debug(@user) %>
<div class="notify">
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :class => "#{name}" %>
<% end %>
</div>
</div>
これは実際に痛いです!これらのすべての時間の後、それはそれでした。ですから、基本的にparamsのシンボルは問題のモデルを指していますか?ありがとう。 – LondonGuy
はいparamsハッシュのキー名は、参照しているオブジェクトのクラス名から得られます。フォームビルダはそれを設定するものです。 '<%= form_for @user、do | f | %> '< - その行 – ctcherry
@GregoryHouse常にあなたのパラメータを印刷してください。あなたのビューやあなたのコントローラにも '<%= params%>'があります。ビューで印刷すると、ハッシュ、その値、およびキーがわかります。次に、ブラウザ自体でチェックすることができます。コントローラの場合は、 '/ log/development.log'かサーバの情報を確認してください。それはparamsのwhatsと明示的に必要なものの詳細なアイデアを与えるでしょう。 – ktkaushik