如何使用嵌套路由映射 has_one 模型以及如何在 RESTful 数据库之后为 /localhost:3000/users/1/profile/new,html.erb 添加 form_for?
用户有一个个人资料。
楷模
class Profile < ActiveRecord::Base
  attr_accessible :name, :surname
  belongs_to :user
end
class User < ActiveRecord::Base
  attr_accessible :email, :email_confirmation, :password, :password_confirmation
  has_secure_password
  has_one :profile, dependent: :destroy
end
  resources :users do
    resources :profiles      (note: has_one profile)
    resources :progress_charts
    resources :calories_journals
  end
视图/配置文件/new.html.erb
<h1>About You</h1>
<div class="row">
  <div class="span6 offset3">
    <%= form_for(@profile) do |f| %>
    <%= render 'shared/error_messages' %>
      <%= f.label :name %>
      <%= f.text_field :name %>
      <%= f.label :surname %>
      <%= f.text_field :surname %>
      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>
控制器:Profiles_controller.rb 我发现了两个错误,因为我不太明白为什么它不起作用。
class ProfilesController < ApplicationController
def index
end
def show
end
  def new
  #  @user = User.find(params[:id]) # Error message: Couldn't find User without an ID
  #  @profile = @user.build_profile()
    @profile = current_user.build_profile(params[:id]) # Error message: unknown attributes: user_id
  end
  def edit
  end
  def create
  end
  def update
  end
  def destroy
  end
end
Helpers:SessionHelper(说明current_user)模块SessionsHelper def sign_in(user) cookies.permanent[:remember_token] = user.remember_token self.current_user = user end
  def signed_in?
    !current_user.nil?
  end
  def current_user=(user)
    @current_user = user
  end
  def current_user?(user)
    user == current_user
  end
  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end
  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
  def signed_in_user
    unless signed_in?
      store_location
      redirect_to signin_path, notice: "Please sign in."
    end
  end
end