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

について10
def 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> 

答えて

2

変更:

if @user.update_attributes(params[:user]) 

へ:

if @user.update_attributes(params[:profile]) 

また、あなたは@profileにそのインスタンス変数の名前を変更したい場合がありますので、あなたは混乱していません。

+0

これは実際に痛いです!これらのすべての時間の後、それはそれでした。ですから、基本的にparamsのシンボルは問題のモデルを指していますか?ありがとう。 – LondonGuy

+0

はいparamsハッシュのキー名は、参照しているオブジェクトのクラス名から得られます。フォームビルダはそれを設定するものです。 '<%= form_for @user、do | f | %> '< - その行 – ctcherry

+0

@GregoryHouse常にあなたのパラメータを印刷してください。あなたのビューやあなたのコントローラにも '<%= params%>'があります。ビューで印刷すると、ハッシュ、その値、およびキーがわかります。次に、ブラウザ自体でチェックすることができます。コントローラの場合は、 '/ log/development.log'かサーバの情報を確認してください。それはparamsのwhatsと明示的に必要なものの詳細なアイデアを与えるでしょう。 – ktkaushik

関連する問題