3

私は、ユーザがスケジュールを作成できるようにする私が作業中のレールアプリを持っています。そうすることで、彼らはイベントが発生する曜日を選択することができるはずです。私は形でこれを行う上で計画していた道がそうのようなチェックボックスの横ごとに、平日であった。しかし複数のフォームチェックボックスのためのデータベース構造

<%= f.check_box :monday %> <%= f.label :monday %> 
<%= f.check_box :tuesday %> <%= f.label :tuesday %> 
<%= f.check_box :wednesday %> <%= f.label :wednesday %> 

等...

を、おそらくないことを私に発生しましたこれを処理する非常に効率的な方法です。各日付をブール値としてデータベースに格納します。 '表示'ビューに日付を表​​示するのは非常に難しいでしょう。

Event Dates: 
<% if @event.monday? %> 
    Monday 
<% end %> 
<% if @event.tuesday? %> 
    Tuesday 
<% end %> 
<% if @event.wednesday? %> 
    Wednesday 
<% end %> 

これは私にとって理想的ではないようです。

私の他の考え方は、attr_accesorsとafter_createという文字列を作成するためのモデルメソッドを使用して、すべてのイベント日付を保持するデータベースに1つの文字列を作成することです。ただし、この場合、ユーザーはどのようにイベントを編集できますか?

これは私には分かりませんが、ここでは私が知りません(私は決して前にこのタイプの構造で何かを作成しようとしたことはありません)。

アドバイスはありますか?

ありがとうございます!

+0

は、イベントが発生した場合あなたはそれを '' 1100101 "' 7個の数字1として保存することができます0-いいえ – Bohdan

+0

@Bohdan、それは本当ですが、私が戻ってイベントを編集しようとすると問題が生じるでしょう。私は編集ページに行くときに適切なチェックボックスを選択します。 – goddamnyouryan

+0

@ボーダン、興味深い。答えとしてもう少し具体的な例を挙げて回答できますか? – goddamnyouryan

答えて

6

で発生DBからレコードを一致させるために

を動作するはずですが、これは行わないでください。

を私の他のアイデアはになりますattr_accesorsとafter_createという文字列を作成するためのモデルメソッドを使用して、すべてのイベント日付を保持する1つの文字列をデータベースに作成します。

このようなことは、1日あたりのクエリを恐ろしく混乱させるような問題を引き起こします。例えば、あなたが1つの列にマッシュされた日を保存した場合、月曜日に利用可能なイベントの数をどのようにカウントしますか?

代わりに、7つのブール値を保持し、シンプルなコンビニエンスメソッドをモデルに追加して、より便利な形式で日数を返します。

def days 
    Date.DAYNAMES.map { |d| read_attribute(d.downcase) } 
end 

、その後、あなたは、単にあなたのビューで@event.daysを反復し、名前に一日数をマッピングすることができます:days方法の具体的な詳細を

<% @event.days.each_with_index do |on_day, i| %> 
    <% if on_day %> 
     <%= Date.DAYNAMES[i] %> 
    <% end %> 
<% end %> 

とどのように対処おそらくこのような何かあなたのERBのそれはもちろん、あなたの特定の状況に依存します。

0
%{Mon Tue ... Sun}.each_with_index do |day, index| 
    <%= check_box_tag 'name', '1', model.attribute[index].to_i %> 
end 

はい、回避策が、日曜日

Model.where("models.name LIKE '1______'") 
1

"私の意見では、" 承認された1 より詳細なより良いコードは次のようになります。

モデル:

ビュー:

<% Model.weekdays.each do |day| %> 
    <%= check_box :model, :days, { :multiple => true }, day.downcase, nil %> <%=day.downcase %> 
<% end %> 
+0

レールモデルの「シリアル化」メソッドの詳細はどこで入手できますか? – goddamnyouryan

+0

* days *配列をa:stringカラム型に保存するとします。この場合、serializeメソッドが必要です。http://apidock.com/rails/ActiveRecord/Base/serialize/class – Ashoor

関連する問題