2010-12-30 19 views
0

私はレールが初めてで、理解できない問題が残っています。私は自分のシナリオを説明します:Ruby on Rails:ネストされたモデルの編集ビューをレンダリングできません

私はDeviseを使って作成されたUserモデルを持っています。そのスキルは、ユーザーの中にルートを入れ子にしているので、私は、ルートファイルを変更した

- skill belongs_to :user 
- user has_one :skill 

:ユーザーを参照する

# Users (Devise) 
devise_for :users, :path_names => { :sign_up => "register"} 

# Skills 
resources :users do 
    resource :skills 
end 

私はスキル(整数:整数科学数学)と呼ばれる別のモデルを作成しました私は、編集と更新を伴うSkillsControllerを作成しました。コードは以下の通りです:私はスキルの編集フォーム(HTTPに移動しようとするたびに

<%= form_for(@skill) do |skill_form| %> 

    <div> 
     <%= skill_form.label :math %><br /> 
     <%= skill_form.text_field :math %> 
    </div> 

    <div class="actions"> 
     <%= skill_form.submit 'Save' %> 
    </div> 

<% end %> 

class SkillsController < ApplicationController 

    def edit 
    @user = User.find(params[:user_id]) 
    @skill = get_skill(@user) 
    end 

    def update 
    @skill = Skill.find(params[:id]) 

    if (@skill.update_attributes(params[:skill])) 
     redirect_to(root_url, {:notice => 'Your skills were successfully updated.'}) 
    else 
     render :action => "edit" 
    end 
    end 

    # the user might have been created without skills, so it will be nil on the first usage 
    # ToDo: extend Devise UserController to create an empty skill on the create action 
    def get_skill(user) 
    if !(user.skill) 
     user.skill = Skill.new 
     user.save 
    end 
    user.skill 
    end 
end 

はFinnally、私の意見/スキル/ edit.html.erbビューには、次のようになります。 :// localhostを:3000 /ユーザー/ 1 /スキル/編集)、次のエラーがスローされます。

ActionController::RoutingError in Skills#edit 

No route matches {:controller=>"skills"} 

Extracted source (around line #1): 

1: <%= form_for(@skill) do |skill_form| %> 
2: 
3:  <div> 

私は私が何か間違ったことをやっている必要があります知っている...だけで何を把握することはできません。|事前に

おかげで、 ブルーノ

答えて

0

あなたget_skill方法ではなく、このようなスキル作成する必要があります:あなたはルートのユーザーの中にネストされたスキルを持っているので、このための

def get_skill 
    user.skill || user.create_skill 
end 

form_forをこのようになります。

<%= form_for [@user, @skill] do |f| %> 
+0

それは 'user.skillすべきではない|| user.build_skill.save !; user.skill'?私はライアンとZabbaとしてしようと試みてきた – Zabba

+0

を示唆し、現在次のエラーが起こる:NoMethodErrorをスキル#編集に #のための未定義のメソッド 'skill_path」<#<クラス:0x386faa8>:0x386bcf8> 抽出されたソース(ライン#1の周りに): 1:<%= form_for(@skill)do | skill_form | %> – Bruno

+0

@Zabba:実際には 'create_skill'がそれを行います。今あなたがあなたのdownvoteを取り除くほど親切であれば。 –

0

変更からのform_for:

form_for(@skill) 

へ:

form_for([@skill.user, @skill]) 
関連する問題