这是继续在rails web应用程序上开发ruby的好方法吗?

时间:2012-09-12 01:48:07

标签: ruby-on-rails

这是继续在rails web应用程序上开发ruby的好方法吗?

这是一个注册示例:

用户模型: user.rb

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

注册控制器: signup-controller.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>

的routes.rb

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

2 个答案:

答案 0 :(得分:1)

正确使用轨道就是遵循其惯例。

  • 将init更改为新

  • 更改注册以创建。

  • 使用资源:路由用户。

更好地遵循使用authLogic或Devise的railscast,而不是自己滚动。

答案 1 :(得分:1)

Michael Durrant提出了一些很好的建议,我会小心不要复制。但是,我想添加一些更具代码性的内容。

准备Rails 4.0

我假设这是一个练习应用程序或者在开发早期的东西。无论你是哪一个,我认为如果你继续采用Rails 4.0中的一些新变化,你会更好。

其中一项新变化是Strong Parameters。 Rails将放弃在模型中使用attr_accessible并创建一种处理控制器中质量分配的新方法。这将允许您“动态”更改可根据不同用户或namespaces更新哪些字段。

到目前为止,更新您编写的代码并不是很困难。我已经完成了自己的关键修改。

<强>的Gemfile

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 resource verbs
  2. 我没有调用.valid?.save,而是将if语句更改为仅使用.save。这是因为.save会调用.valid?并相应地返回false。
  3. 我修改/添加了redirect_torender次调用create操作。 redirect_to调用是一个更重要的更改,因为它有助于防止双重表单提交。
  4. 为表单使用部分

    在Rails中使用视图的一个很酷的功能是partials。部分允许您提取在多个位置使用的HTML片段。通过使用部分文件,您可以在一个文件中编写form_for的代码,并在newedit操作中使用它。保留代码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 %>
    

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