【问题标题】:Create a controller and view创建控制器和视图
【发布时间】:2012-11-04 18:06:59
【问题描述】:

您好,我有以下型号。

用户模型:

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 控制器用户信息

o

rails g 控制器用户信息

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

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

谢谢。也许这些是一个基本问题,但我是 Rails 新手,我不知道该怎么做。

再次感谢您的帮助。

【问题讨论】:

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


    【解决方案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])
    

    查找显示信息的用户。

    【讨论】:

      【解决方案2】:

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

      1) 导轨 g 用户控制器

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

      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
      

      【讨论】:

        【解决方案3】:

        首先

        在用户模型中,应该有

          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])
        

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

        【讨论】:

        • Thnaks Akshay Vishnoi 但我对控制器有疑问,在 rails 控制器约定中说控制器是复数,所以我不知道控制器应该是 rails g controller UserInformations 还是 rails generate controller用户信息。谢谢
        • 您实际上应该使用控制器名称的复数形式。它有助于路线。至于索引动作,我们可以直接使用 user_information_path。因此,在您的情况下,请使用“rails g controller user_informations”
        • 另外,如果您在 generate 命令中提供动作名称,rails 会自动为您生成动作方法和视图。例如rails g 控制器 user_informations 索引,新建,编辑
        猜你喜欢
        • 2014-09-14
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多