0

私は現在のスレッド化された会話のメッセージのリストをユーザーが見ることができるページを持っています。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]"を使用しなければならないことに気付きました。

+0

「会話」レコードなど、現在の会話スレッドに関連するエンティティがあるはずです。もし会話記録IDを渡したら、その会話のすべてのメッセージを見つけて削除してください。 – nkm

+0

私のポストにいくつかの情報を追加 – LondonGuy

答えて

関連する問題