Rails/フォーム
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&tag(Rails/フォーム);
*目次 [#zc5cb8b4]
#contents
*関連ページ [#tbe1b391]
*参考情報 [#v2e8a01d]
*Tips [#r6205d0d]
**フォーム内のボタンをsubmit以外にする [#t773b6f7]
-[[RailsのForm内のbuttonでsubmit以外のことをさせたい(lin...
-結局link_toの中にbutton_tagを書くしかない?
#pre{{
<%= link_to (button_tag "ボタン", type: 'button'), { cont...
}}
**データの保存時に空白をnullに変換 [#sb3131d6]
-[[mysql - Rails: Force empty string to NULL in the datab...
-[[rubiety/nilify_blanks:https://github.com/rubiety/nilif...
**複数Submitボタンが存在するForm [#xd43d26a]
-ビュー側
#pre{{
<%= form_tag(operate_url) do %>
<%= submit_tag('移動')%>
<%= submit_tag('削除', {name: 'delete'})%>
<% end %>
}}
-コントローラー側
#pre{{
if params[:delete]
#削除処理
redirect_to(folder_path(@folder), notice: "削除しま...
else
#通常処理
redirect_to(folder_path(@folder), notice: "移動しま...
end
}}
**2重保存を防ぐ [#d65bc4c1]
***double submit protectionを使う [#h97eedea]
-Submitを無効化するのではなく、戻る=>保存の2重登録を防ぐ...
--[[herval/double_submit_protection:https://github.com/he...
--[[実録!Railsのはまりポイント10選:http://www.slideshare...
--[[browser - Rails: Prevent duplicate inserts due to pre...
-全部同じアイデアでセッションにトークンを保存して、保存時...
-ちなみにRedmineでも戻る、保存で連続作成できてしまう。何...
***ハッシュ値を計算して2重登録を防ぐ方法 [#aa8c6cb2]
-[[Prevent double data submission in Rails 3 - hibbard.eu...
-JavaScriptでボタンを無効化した上直前に登録されたデータと...
-モデルに以下を追加
#pre{{
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].b...
res << self[column.name]
end
res.hash.to_s
end
}}
-コントローラーに以下を追加。
#pre{{
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_applica...
@applicant.save
ApplicantMailer.admin_notification(@applicant).deli...
ApplicantMailer.application_confirmation(@applicant...
end
redirect_to :action => "success"
else
render action: "new"
end
end
}}
***Redisを使う [#s049eb5c]
-redisを使う
#pre{{
Redis.current.lock("#{current_user.id}.action_name") do
# Some code
end
}}
***PHPの方法 [#cd9b087c]
-[[PHPでの二重送信対策が、効いていない?(追記あり) - Qiit...
終了行:
&tag(Rails/フォーム);
*目次 [#zc5cb8b4]
#contents
*関連ページ [#tbe1b391]
*参考情報 [#v2e8a01d]
*Tips [#r6205d0d]
**フォーム内のボタンをsubmit以外にする [#t773b6f7]
-[[RailsのForm内のbuttonでsubmit以外のことをさせたい(lin...
-結局link_toの中にbutton_tagを書くしかない?
#pre{{
<%= link_to (button_tag "ボタン", type: 'button'), { cont...
}}
**データの保存時に空白をnullに変換 [#sb3131d6]
-[[mysql - Rails: Force empty string to NULL in the datab...
-[[rubiety/nilify_blanks:https://github.com/rubiety/nilif...
**複数Submitボタンが存在するForm [#xd43d26a]
-ビュー側
#pre{{
<%= form_tag(operate_url) do %>
<%= submit_tag('移動')%>
<%= submit_tag('削除', {name: 'delete'})%>
<% end %>
}}
-コントローラー側
#pre{{
if params[:delete]
#削除処理
redirect_to(folder_path(@folder), notice: "削除しま...
else
#通常処理
redirect_to(folder_path(@folder), notice: "移動しま...
end
}}
**2重保存を防ぐ [#d65bc4c1]
***double submit protectionを使う [#h97eedea]
-Submitを無効化するのではなく、戻る=>保存の2重登録を防ぐ...
--[[herval/double_submit_protection:https://github.com/he...
--[[実録!Railsのはまりポイント10選:http://www.slideshare...
--[[browser - Rails: Prevent duplicate inserts due to pre...
-全部同じアイデアでセッションにトークンを保存して、保存時...
-ちなみにRedmineでも戻る、保存で連続作成できてしまう。何...
***ハッシュ値を計算して2重登録を防ぐ方法 [#aa8c6cb2]
-[[Prevent double data submission in Rails 3 - hibbard.eu...
-JavaScriptでボタンを無効化した上直前に登録されたデータと...
-モデルに以下を追加
#pre{{
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].b...
res << self[column.name]
end
res.hash.to_s
end
}}
-コントローラーに以下を追加。
#pre{{
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_applica...
@applicant.save
ApplicantMailer.admin_notification(@applicant).deli...
ApplicantMailer.application_confirmation(@applicant...
end
redirect_to :action => "success"
else
render action: "new"
end
end
}}
***Redisを使う [#s049eb5c]
-redisを使う
#pre{{
Redis.current.lock("#{current_user.id}.action_name") do
# Some code
end
}}
***PHPの方法 [#cd9b087c]
-[[PHPでの二重送信対策が、効いていない?(追記あり) - Qiit...
ページ名: