Я новичок в рельсах, и я застрял с проблемой, которую я не могу понять. Я объясню свой сценарий:
У меня есть модель User, созданная с помощью Devise. Я создал другую модель под названием Skill (математика: целочисленная наука: целое число), которая ссылается на пользователя:
- 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 с действиями edit и update. Код следующий:
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
В конечном итоге мой вид views / skills / edit.html.erb выглядит следующим образом:
<%= 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 %>
Всякий раз, когда я пытаюсь перейти к форме редактирования навыков (http://localhost:3000/users/1/skills/edit), выдается следующая ошибка:
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>
Я знаю, что, должно быть, я делаю что-то не так ... просто не могу понять, что: |
Спасибо заранее,
Bruno