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

サインアップコントローラー: 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>

ルート.rb

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

2 に答える 2

1

Railsを正しくするためには、その慣習に従うことがすべてです。

  • initをnewに変更します

  • サインアップを変更して作成します。

  • ルートにresources:usersを使用します。

独自のロールキャストではなく、authLogicまたはDeviseの使用に関するレールキャストに従うことをお勧めします。

于 2012-09-12T02:24:16.937 に答える
1

Michael Durrantは、コピーしないように注意するという素晴らしいアドバイスをしてくれました。ただし、コード固有の、追加したいことがいくつかあります。

Rails4.0の準備

これは、実践的なアプリケーションか、開発の初期段階にあるもののいずれかだと思います。どちらが当てはまるかに関わらず、Rails 4.0の新しい変更のいくつかを採用することを進めれば、より良い結果が得られると思います。

新しい変更の1つは、StrongParametersです。Railsはattr_accessible、モデルでの使用を中止し、コントローラーでの一括割り当てを処理する新しい方法を作成します。これにより、さまざまなユーザーまたは名前空間に応じて、更新できるフィールドを「動的に」変更できます。

これまでに作成したコードを更新することはそれほど難しくありません。私は先に進んで、重要な変更を自分で行いました。

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リソースの動詞と一致するようにアクション名を変更しました。
  2. .valid?andを呼び出す代わりに、ステートメントを.のみを使用するよう.saveに変更しました。これは、がそれに応じてfalseを呼び出して返すためです。if.save.save.valid?
  3. アクションを変更/追加redirect_toしてrender呼び出しますcreate。呼び出しは、redirect_to二重フォームの送信を防ぐのに役立つため、より重要な変更です。

フォームにパーシャルを使用する

Railsでビューを操作する際の優れた機能の1つは、パーシャルです。パーシャルを使用すると、複数の場所で使用されているHTMLのスニペットを抽出できます。パーシャルをform_for使用することで、1つのファイルに自分のコードを記述し、それを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 に答える