ユーザーに「ランダム」オプションを提供して、データベース (letsgos テーブル内) から使用する以前に作成された日付のアイデアを選択できるようにしたいと考えています。ユーザーがフォームに記入して、行きたい日付を提案できる「Let's Go...」セクションがあります。自分でデートのアイデアを思いつくことができないユーザーがいるでしょう. したがって、独自の日付を作成できないユーザーのために、クリックするたびに (データベースからの) 日付をフォームに挿入する「ランダム」ボタンを提供したいと考えています。letsgos テーブルからのデータベース内の日付がcontent
ありtag
、それらに割り当てられます。ユーザーがランダムにクリックすると、フォームにコンテンツとタグが入力されます (ランダムにクリックするたびに、データベースからの新しいデータが表示されます)。JavaScript の経験がないので、正しい方法で行っているかどうかわかりません。
/views/letsgos/_form.html.erb:
<%= form_for(@letsgo) do |f| %>
<div class="field">
<%= f.text_area :content, placeholder: "Propose new date..." %>
</div>
<%= f.select :tag, options_for_select( [["Select One", ""], "Eat/Drink", "Listen/Watch", "Play", "Explore", "Other"]) %>
<a href="/letsgos/random" class="ajax">Click here for a Random letsgo</a>
<%= f.submit "Post" %>
<% end %>
/views/layouts/application.html.erb
<head>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
$(document).ready(function() {
$('.ajax').click(function() {
$.get(this.href, function(response) {
console.log(response);
$('body').html(response);
});
});
});
<script>
</head>
レッツゴーコントローラー:
def create
@letsgo = current_user.letsgos.build(letsgo_params)
if @letsgo.save
flash[:success] = "Date posted!"
redirect_to root_url
else
flash[:error] = "Date was not posted!"
redirect_to root_url
end
end
def destroy
@letsgo.destroy
redirect_to root_url
end
def random
@letsgo = Letsgo.random.first
if request.xhr?
end
end
private
def letsgo_params
params.require(:letsgo).permit(:content, :tag)
end
def correct_user
@letsgo = current_user.letsgos.find_by(id: params[:id])
redirect_to root_url if @letsgo.nil?
end
キャッシュ列の移行:
rails g migration add_ids_count
def self.up
add_column :letsgos, :ids_count, :integer, :default => 0
Letsgo.reset_column_information
Letsgo.all.each do |l|
l.update_attribute :id_count, l.id.length
end
end
def self.down
remove_column :letsgos, :id_count
end
end