私は現在のスレッド化された会話のメッセージのリストをユーザーが見ることができるページを持っています。ruby on railsで一度に複数の属性を更新する
彼らは、削除リンク(各メッセージの各ループ内リンク)を使用して、各メッセージを削除することができます。
<%= link_to 'Delete', message, :method => :delete, :confirm => "Are you sure?", :title => message.body %> <br />
これは基本的に私のmessages_controllerでアクションにそれらを接続する:
def destroy
@message = Message.find(params[:id])
@message.update_attribute('sender_status', 1) if @message.sender_id == current_user.id
@message.update_attribute('recipient_status', 1) if @message.recipient_id == current_user.id
@message.destroy if @message.sender_status == 1 && @message.recipient_status == 1
flash[:success] = "Message deleted"
redirect_to :back
end
今私が望むのは、すべてのメッセージの前に1つのリンクです(これを各ブロックに入れないでください)。このリンクは「すべて削除」と呼ばれ、1の属性を値1で更新するのではなく、すべての属性(sender/recipient_status)を1に更新して、個々のメッセージの削除リンクをクリックする必要がなくなります。
私はこれを行う方法にちょっと固執しています。私はチェックボックスを使うのではなく、むしろリンクを削除するので、削除するにはリンクを使いたいと思う。
どのようなボディでも私には解決策を提供できますか?私は本当にそれを感謝します。昨夜、私はそれを寝ると思っていましたが、午前中はアイデアを持っていましたが、まだ何も気にしません。
種類は、メッセージが会話に属し
更新
を考えています。私は会話をつかむことができます: 1)MessageThreadテーブル。これは、最初のメッセージのmessage_idを、その会話内の他のメッセージのparent_idである会話に格納します。例えば、
+-----+----------+---------+---------+---------+--------+---------+----------+----------+----------+
| id | sende... | reci... | body | pare... | status | crea... | updat... | sende... | recip... |
+-----+----------+---------+---------+---------+--------+---------+----------+----------+----------+
| 220 | 4 | 1 | hi | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 221 | 1 | 4 | hey | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 222 | 4 | 1 | hi | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 223 | 1 | 4 | hi | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 232 | 1 | 4 | good | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 233 | 4 | 1 | and ... | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 237 | 1 | 4 | hmm | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 238 | 1 | 4 | yay | 220 | 0 | 2012... | 2012-... | 0 | 0 |
| 239 | 1 | 4 | yess | 220 | 0 | 2012... | 2012-... | 0 | 0 |
2)私は会話を親IDで見つけることもできます。例えばm = Message.find_by_parent_id(220)。私はちょうどここm.children
を入力しの会話に他のメッセージを取得するための
は私のmessagethreadsテーブルがどのように見えるかです:ここでは
+-----+------------+-----------+--------------+--------+---------------------+---------------------+
| id | message_id | sender_id | recipient_id | status | created_at | updated_at |
+-----+------------+-----------+--------------+--------+---------------------+---------------------+
| 102 | 247 | 1 | 5 | 0 | 2012-02-16 16:18... | 2012-02-16 16:18... |
| 101 | 246 | 1 | 3 | 0 | 2012-02-16 16:14... | 2012-02-16 16:14... |
| 90 | 220 | 4 | 1 | 0 | 2012-02-15 14:05... | 2012-02-15 14:05... |
| 89 | 219 | 4 | 38 | 0 | 2012-02-15 12:26... | 2012-02-15 12:26... |
| 88 | 218 | 2 | 4 | 0 | 2012-02-14 13:41... | 2012-02-14 13:41... |
| 87 | 210 | 1 | 2 | 0 | 2012-02-14 13:31... | 2012-02-14 13:31... |
+-----+------------+-----------+--------------+--------+---------------------+---------------------+
は私のために働いているものです。
def destroy_all_messages
Message.find_by_parent_id(params[:format]).children.each do |message|
message.update_attribute('sender_status', 1) if message.sender_id == current_user.id
message.update_attribute('recipient_status', 1) if message.recipient_id == current_user.id
message.destroy if message.sender_status == 1 && message.recipient_status == 1
end
flash[:success] = "Messages deleted"
redirect_to :back
end
と:
<%= link_to 'Delete All', messages_delete_all_messages_path(@current_thread.message_id), :method => :delete, :confirm => "Are you sure?" %> <br />
これは私のために働いている..意見ですか? コントローラーのlink_toメッセージパスに渡されたパラメーターを取得するために "params [:format]"を使用しなければならないことに気付きました。
「会話」レコードなど、現在の会話スレッドに関連するエンティティがあるはずです。もし会話記録IDを渡したら、その会話のすべてのメッセージを見つけて削除してください。 – nkm
私のポストにいくつかの情報を追加 – LondonGuy