0

您好,我有以下型号。

用户模型:

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation
  has_one :user_informations
  has_secure_password
end

用户信息模型:

class UserInformation < ActiveRecord::Base
  belongs_to :user
  attr_accessible :address, :address2, :business, :descripcion, :identification_number, :mobile_cell, :name, :phone_number
end

现在我需要创建视图和控制器来创建和更新用户信息,我有很多问题:

1)如何生成控制器:

rails g 控制器用户信息

rails g 控制器用户信息

2)我的新建、创建和更新操作如何知道用户 ID。

3)如何设置此用户信息的路由

谢谢。也许这些是一个基本问题,但我是 Rails 新手,我不知道如何做所有这些。

再次感谢你的帮助。

4

3 回答 3

1

You'll need a user_id column in your user_information table and model.

1) rails g UserController

2) you can include the user_id as param, so for the new action it will be

def new
  @user = User.find(param[:user_id])
  @user_information = @user.user_information.new
end

the create and update actions would get the user id from the form params but you'll need to think about who is going to be using these actions and if you want to allow all users to update the information of other users. If not, you should have the user id as a hidden param and use a gem like cancan (https://github.com/ryanb/cancan) to restrict access

alternatively you can set them up as nested resources (http://railscasts.com/episodes/139-nested-resources)

3) for a simple resources you can add this to your routes.rb file

resource :user_information

or for nested you can do

resource :users do
  member do
    resource :user_information
  end
end
于 2012-11-04T18:52:28.650 回答
1

1)您必须对控制器使用复数,所以rails g controller UserInformations可以。

2 + 3) 可以设置 Restful 路由:

resources :users do
  member do
    get 'user_information'
  end
end

使用上述路线,您将拥有 path users/:id/user_information,因此您可以通过 了解您的用户 ID params[:id],例如,在您可以使用的创建或更新操作中:

user = User.find(params[:id])

查找显示信息的用户。

于 2012-11-04T18:46:37.800 回答
0

首先

在用户模型中,应该有

  has_one :user_information

因为关联名称应该是单数的 has_one。

您可以通过给出命令来创建控制器

rails g controller UserInformation

这取决于你想给你的控制器起什么名字。

在新操作中,您必须通过其 ID 查找用户。您可以在登录后将用户 ID 存储在会话中。或者,如果您是第一次保存用户,则必须传递用户 ID。

在新的行动中

user = User.find(session[:id])
user.user_information.create(params[:user_information])

我认为你需要先研究所有这些。通过一些例子。然后尝试。在这里问太快了。

于 2012-11-04T18:42:58.207 回答