Tag: Rails/フォーム

目次

関連ページ

参考情報

Tips

フォーム内のボタンをsubmit以外にする

データの保存時に空白をnullに変換

複数Submitボタンが存在するForm

  • ビュー側
    <%= form_tag(operate_url) do %>
        <%= submit_tag('移動')%>
        <%= submit_tag('削除',  {name: 'delete'})%>
    <% end %>
    
  • コントローラー側
        if params[:delete]
          #削除処理
          redirect_to(folder_path(@folder), notice: "削除しました")
        else
         #通常処理
          redirect_to(folder_path(@folder), notice: "移動しました")
        end
    

2重保存を防ぐ

double submit protectionを使う

ハッシュ値を計算して2重登録を防ぐ方法

  • Prevent double data submission in Rails 3 - hibbard.euにて提唱されている方法。
  • JavaScriptでボタンを無効化した上直前に登録されたデータとハッシュ値の比較を行うことで防ぐ。
  • モデルに以下を追加
    def make_hash
      res = []
      columns_to_skip = ["created_at", "updated_at", "hash"]
      for column in Applicant.content_columns
        next if columns_to_skip.include?(column.name) or 
                self[column.name].nil? or self[column.name].blank?
        res << self[column.name]
      end
      res.hash.to_s
    end
    
  • コントローラーに以下を追加。
    def create
      @applicant = Applicant.new(params[:applicant])
      a = Applicant.last
      @previous_applicant_hash = (a.nil?)? 0 : a.applicant_hash
      if @applicant.valid?
        unless @applicant.applicant_hash == @previous_applicant_hash
          @applicant.save
          ApplicantMailer.admin_notification(@applicant).deliver
          ApplicantMailer.application_confirmation(@applicant).deliver
        end
        redirect_to :action => "success"
      else
        render action: "new"
      end
    end
    

Redisを使う

  • redisを使う
    Redis.current.lock("#{current_user.id}.action_name") do
       # Some code
    end
    

PHPの方法


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-21 (木) 16:37:52 (1002d)