这是继续在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
答案 0 :(得分:1)
正确使用轨道就是遵循其惯例。
将init更改为新
更改注册以创建。
使用资源:路由用户。
更好地遵循使用authLogic或Devise的railscast,而不是自己滚动。
答案 1 :(得分:1)
Michael Durrant提出了一些很好的建议,我会小心不要复制。但是,我想添加一些更具代码性的内容。
我假设这是一个练习应用程序或者在开发早期的东西。无论你是哪一个,我认为如果你继续采用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
进行了一些更改。
.valid?
和.save
,而是将if
语句更改为仅使用.save
。这是因为.save
会调用.valid?
并相应地返回false。redirect_to
和render
次调用create
操作。 redirect_to
调用是一个更重要的更改,因为它有助于防止双重表单提交。在Rails中使用视图的一个很酷的功能是partials。部分允许您提取在多个位置使用的HTML片段。通过使用部分文件,您可以在一个文件中编写form_for
的代码,并在new
和edit
操作中使用它。保留代码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 %>
如果您对我发布的内容有任何疑问,请询问。我会尽力解释一切。