2016-06-28 11 views
0

私は現在Subscriberという属性を持っています。mug_numberというデータ型は整数です。私は人が加入者になることができるページを持っています。人がサインアップするたびに、この数字を1ずつ増やして、インデックスに各人物の番号が表示されるようにします。わかりやすくするためにコードを投稿します。サブスクライバ番号を追跡する属性を追加する - Rails

加入者CONTROLLER:

class SubscribersController < ApplicationController 
    helper_method :sort_column, :sort_direction 

    def index 
    @search = Subscriber.search(params[:q]) 
    @subscriber = @search.result 
    @search.build_condition if @search.conditions.empty? 
    @search.build_sort if @search.sorts.empty? 
    end 

    def new 
    @subscriber = Subscriber.new 
    end 

    def create 
    @subscriber = Subscriber.create(subscriber_params) 
    if @subscriber.save 
     flash[:notice] = "Subscriber Has Been Successfully Created" 
     redirect_to new_subscriber_path(:subscriber) 
    else 
     render "new" 
    end 
    end 

がSCHEMA:

create_table "subscribers", force: :cascade do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.string "email" 
    t.string "phone_number" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "visit" 
    t.integer "mug_number" 
    end 

スキーマで見ることができるように、私は今Subscriber

mug_number属性を持っている私が追加しようとしていますhidden_​​fieldフォームのために私は正しい実装とは思わない?

FORM:

<%= form_for @subscriber do |form| %> 
    <div class="form-group"> 
     <p> 
     <%= form.text_field :first_name, placeholder: "First Name", class: "text_field" %> 
     </p> 
     <p> 
     <%= form.text_field :last_name, placeholder: "Last Name", class: "text_field" %> 
     </p> 
     <p> 
     <%= form.text_field :phone_number, placeholder: "phone", class: "text_field" %> 
     </p> 
     <p> 
     <%= form.text_field :email, placeholder: "Email", class: "text_field" %> 
     </p> 
     <%= form.hidden_field :mug_number %> 
    </div> 
    <%= form.submit "Sign Up", class: "btn" %> 
    <% end %> 

これは簡単な話でなければなりませんが、何らかの理由で、私はそれを把握するように見えることはできませんか?どんな助けも素晴らしいだろう!

答えて

1

レコードを保存するときまで番号を生成したくないため、非表示フィールドは必要ありません。

before_createコールバックSubscriberモデルで行う必要があります。

class Subscriber < ActiveRecord::Base 
    before_create :generate_mug_number 

private 

    def generate_mug_number 
    last_number = Subscriber.maximum(:mug_number) || 0 
    self.mug_number = last_number + 1 
    end 
end 
+0

このアイデアは本当に好きですが、実装しようとしたときにうまくいかなかったのですか?私が知る必要があることは他にありますか? – Bitwise

+0

すべてが以前と同じように機能しました。私が人にサインしたときのように、それはmug_numberにカウントを入れていませんでした。 – Bitwise

+0

何ができるか分かりません。私は、私たちのアプリケーションの1つにシーケンシャルインボイス番号を作成するために同様のロジックを実行しています。 –

関連する問題