0

我试图弄清楚如何为表单对象编写显示操作。

以下是从 RailsCast 第 416 集项目中获取的代码

应用程序/表格/signup_form.rb

class SignupForm
  # Rails 4: include ActiveModel::Model
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  def persisted?
    false
  end

  def self.model_name
    ActiveModel::Name.new(self, nil, "User")
  end

  validates_presence_of :username
  validate :verify_unique_username
  validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/
  validates_length_of :password, minimum: 6

  delegate :username, :email, :password, :password_confirmation, to: :user
  delegate :twitter_name, :github_name, :bio, to: :profile

  def user
    @user ||= User.new
  end

  def profile
    @profile ||= user.build_profile
  end

  #...
end

应用程序/控制器/users_controller.rb

class UsersController < ApplicationController
  def new
    @signup_form = SignupForm.new
  end

  def create
    @signup_form = SignupForm.new
    if @signup_form.submit(params[:user])
      session[:user_id] = @signup_form.user.id
      redirect_to @signup_form.user, notice: "Thank you for signing up!"
    else
      render "new"
    end
  end

  def show
    @user = current_user
  end
end

我看不到如何传递模型的 ID 并指定变量。

有没有人有一个例子或者可以提供一个使用剧集代码作为起点的例子?

4

1 回答 1

1

该特定情节将表单构建抽象到应用程序路径中的单独文件夹中。您已进入 views 文件夹以查看它是如何使用的。具体来说,在这里

这是设置所有变量的地方,这些变量作为routes.rb 文件sessions/signup中定义的路由的一部分传递。

但是,典型的show操作不会有表单,因为它通常会显示与查询的记录有关的信息。edit动作用于显示表单并传递给动作update。在该表单中,您将拥有用户信息的字段,并且您将提供一个hidden_field :id帮助器来指示正在更新的用户的 id。update那,或者使用 routes 参数并在保存来自传递的params哈希的更改之前在操作中实例化它。

但是,该特定项目中没有编辑/更新操作。

于 2013-08-03T18:48:04.313 回答