创建一个控制器和视图

时间:2012-11-04 18:07:00

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

您好我有以下型号。

用户模型:

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

UserInformation模型:

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

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

1)如何生成控制器:

  

rails g controller UserInformations

o

  

rails g controller UserInformation

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

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

感谢。也许这些是一个基本问题,但我是铁杆新手,我不知道如何做到这一切。

再次感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

1)您必须对控制器使用复数,因此rails g controller UserInformations将起作用。

2 + 3)您可以设置Restful路线:

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

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

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

查找显示哪个用户的信息。

答案 1 :(得分:1)

您的user_information表和模型中需要一个user_id列。

1)rails g UserController

2)您可以将user_id包含为param,因此对于新操作,它将是

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

创建和更新操作将从表单参数中获取用户ID,但您需要考虑谁将使用这些操作以及是否要允许所有用户更新其他用户的信息。如果没有,您应该将用户ID作为隐藏的参数,并使用像cancan(https://github.com/ryanb/cancan)这样的gem来限制访问

或者您可以将它们设置为嵌套资源(http://railscasts.com/episodes/139-nested-resources)

3)对于简单的资源,您可以将其添加到routes.rb文件

resource :user_information

或嵌套你可以做

resource :users do
  member do
    resource :user_information
  end
end

答案 2 :(得分: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])

我认为你需要先研究这一切。看一些例子。然后试试。在这里问这个问题太快了。