2

進行中の会話のリストを各ユーザーに表示したいと考えています。そのため、クリックするだけで、必要な会話を表示できます。メールボックスの会話オブジェクトには ID がないため、このリンクの作成方法がわかりません。

このIDは通知オブジェクトに格納されているようですので、このオプションを試してみました。

このコードは、会話インデックス ビューからのものです。

<%all_conv = current_user.mailbox.conversations%>
<%all_conv.each do |participant|%>
  <div class="ligne_conversation">
  <ul>
    <a href="conversations/<%=@conversation_id%>">
      <li>
        <%=image_tag participant.messages.last.sender.avatar.url(:thumb) %>
        <%=participant.messages.last.sender.name%>                  
        <%=participant.messages.last.body%>
      </li>
    </a>
  </ul></div>

@conversation_id インスタンス変数は、会話コントローラーで定義されています

def index
  if current_user.mailbox.conversations.any?
  notification = Notification.find_by!(params[:id])
  @conversation_id = notification.conversation_id
  end
end

機能していません。すべてのリンクが id = 1 の会話につながっています。

4

1 に答える 1

2

誰かが会話リンクをクリックすると、会話コントローラーに移動し、def index ではなく def show が検索されると思います。したがって、次のようなものが必要です。

    def show
       @conversation = Conversation.find(params[:id])
      respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @conversation }
     end
    end

インデックス コントローラーでは、次のことを行う必要があります。

    def index
       @conversations = current_user.mailbox.conversations

最後に、ビューで次のような @conversations を反復処理します

    @conversations.each do |c|
     <a href="conversations/<%= c.id %>

すべてをよりエレガントにするために link_to と url_for を調べたいと思うかもしれませんが、上記はうまくいきます。

以下は、Rails の冒険を始めるための非常に簡単なアドバイスです。

新しい Rails アプリを作成します。

    rails new learncrud
    cd learncrud
    rails g scaffold thing name body something:int
    rake db:migrate
    rails s 

次に 127.0.0.1:3000/things に移動し、結果を確認します

完了したら、お気に入りのテキスト エディターでアプリを開き、スキャフォルダーがどのようにページとコントローラー アクションを作成したかを確認します。やったことがあるかもしれませんし、そうでないかもしれませんが、Rails でどのように処理できるかをすばやく把握するのに役立つことは間違いありません。href でコントローラー名をハードコーディングすることは、最善の方法ではありません。

于 2014-02-12T00:09:29.180 に答える