edit.html.erb ページに次のフォームがあります
<%= form_for(@device) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :description %>
<%= f.text_area :description, :rows => "5" %>
<%= f.label :device_identifier %>
<%= f.text_field :device_identifier, :value => @device.device_identifier, :readonly => true, :class => "d-id", :id => "deviceIDfield" %>
<%= button_tag "New device identifier", :id => "deviceIDbutton", :class => "btn btn-small btn-inverse", :type => "button" %>
<%= f.submit "Save changes", :class => "btn btn-large btn-primary", :id => "white" %>
<% end %>
[新しいデバイス識別子] をクリックすると、:device_identifier フィールドで、Ruby メソッド SecureRandom.urlsafe_base64 で現在設定されている値を再生成する必要があります。これは単純に base64 でエンコードされたランダムな文字列を生成します。私はjQueryを使ってこれをやろうとしていますが、Ruby on RailsとJQueryの両方が初めてなので問題があります。
javascripts ディレクトリにある shared.js.erb というファイルをセットアップしました。ここには次のコードがあります...
$(document).ready(function(){
$('#deviceIDbutton').click(function () {
$("#deviceIDfield").val('<%= SecureRandom.urlsafe_base64 %>');
});
})
これは、ボタンを初めてクリックしたときに機能します (つまり、device_identifier フィールドを新しい文字列で更新します) が、その後は機能しなくなります。これは、ボタンがクリックされるたびではなく、SecureRandom.urlsafe_base64 が 1 回 (ドキュメントの準備ができたとき..?) 呼び出されるためだと思います。誰かが私を助けてくれませんか!、私はこれについてあまりにも長い間頭を悩ませてきました。
:remote => true をどこでも使用する必要がない理由や、使用する場合はどこに置くべきかなど、いくつかのことについて非常に確信が持てません。
また、jQueryがどこに行くべきかについて正しい考えを持っているとは決して確信していません.私が作成したshared.js.erbファイルで動作しているように見えますが、素晴らしいことだ。
また、同じ機能を適用したい new.html.erb ファイルに同じボタンがあることにも言及する価値があります。
どうもありがとう!
ベン