0

这是继续开发 ruby​​ on rails Web 应用程序的好方法吗?

这是一个注册示例:

用户模型: user.rb

class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :username
validates_presence_of :email, :name, :password, :username
end

注册控制器:注册控制器.rb

class SignupController < ApplicationController
def init
    @user = User.new
    render :template => '/signup/signup'
end

def signup
    @user = User.new(params[:user])
    if @user.valid?
        @user.save
        render :template => '/signup/success'
    else
               #bla bla bla
    end
end
end

注册页面: signup.html.erb

  <h1>Signup!!!</h1>
  <%= form_for(@user, :url => signup_path) do |f| %>
   Name: <%= f.text_field  :name %> </br>
   Email <%= f.text_field :email %> </br>
   Username: <%= f.text_field :username %> </br>
   Password: <%= f.text_field :password %> </br>
   <%= submit_tag "Submit" %>
  <% end %>

注册过程完成后: success.html.erb

<h1>signup successfull :) </h1>

路线.rb

get '/index/signup' => 'signup#init', :as => :signup_index
post '/index/signup/' => 'signup#signup', :as => :signup
4

2 回答 2

1

迈克尔杜兰特给出了一些很好的建议,我会小心不要复制。但是,我想添加一些代码更具体的内容。

为 Rails 4.0 做准备

我假设这要么是一个练习应用程序,要么是早期开发的东西。不管哪一种对你来说都是正确的,我认为如果你继续采用 Rails 4.0 中的一些新变化,你会变得更好。

新的变化之一是强参数。Rails 将放弃attr_accessible在模型中的使用,并在控制器中创建一种处理质量分配的新方法。这将允许您根据不同的用户或命名空间“动态地”更改哪些字段可以更新。

更新到目前为止编写的代码并不是很困难。我已经继续并自己进行了关键更改。

宝石文件

gem 'strong_parameters'

用户模型: user.php

class User < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection
  validates_presence_of :email, :name, :password, :username
end

用户控制器: users_controller.php

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to login_path, :notice => "You have signed up successfully. You may now login!"
    else
      render :new, :alert => "There was an problem creating your account"
    end
  end

private

  def user_params
    params.require(:user).permit(:email, :name, :password, :username)
  end
end

注意:users_controller.php除了使用强参数之外,我还做了一些更改。

  1. 我更改了动作名称以匹配Rails 资源动词
  2. 我没有调用.valid?and .save,而是将if语句更改为仅使用.save. 这是因为.save会相应地调用.valid?并返回 false。
  3. 我修改/添加redirect_torender呼吁create采取行动。该redirect_to调用是一个更重要的更改,因为它有助于防止重复提交表单。

为您的表单使用部分

在 Rails 中使用视图的一个很酷的特性是partials。部分允许您提取在多个地方使用的 HTML 片段。通过使用部分,您可以form_for在一个文件中编写代码并在newandedit操作中使用它。保持你的代码DRY

另外,我注意到您没有<label>在表单中使用标签。这是我认为非常重要的事情,因为它改善了用户体验。

注意:我已更改注册页面文件名以匹配我的users_controller.php.

注册页面: new.html.erb

<h1>Signup!!</h1>
<%= render :partial => "form" %>

用户形式: _form.html.erb

<%= form_for @user do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %><br />

  <%= f.label :email, "Email Address" %>
  <%= f.email_field :email %><br />

  <%= f.label :username %>
  <%= f.text_field :username %><br />

  <%= f.label :password %>
  <%= f.password_field :password %><br />

  <%= f.submit "Sign Up" %>
<% end %>

如果您对我发布的内容有任何疑问,请询问。我会尽力解释任何我能解释的。

于 2012-09-12T05:23:27.327 回答
1

正确使用 Rails 就是遵循它的约定。

  • 将初始化更改为新的

  • 更改注册以创建。

  • 使用资源:用户路由。

最好遵循使用 authLogic 或 Devise 的 railscast,而不是自己动手。

于 2012-09-12T02:24:16.937 回答