"link_to... do ... end" 方法的替代方法

Alternative to "link_to... do ... end" aproach

我有这段代码。

<div class="tweet" id="tweet-<%= tweet.id %>">

  <%= image_tag @user.avatar.url(:thumb) %>

  <div class="tweet-content">
    <strong><%= @user.first_name + " " + @user.last_name %></strong>
    <span class="date">- <%= tweet.created_at.strftime("%e %B %Y") %></span>
    <p><%= tweet.content %></p>

    <div class="tweet-action">


      <% @replies_count = tweet.replies_count %>

      <a href="#" class="show-reply"></a>

      <% @like_class = "glyphicon glyphicon-star like-tweet"+tweet.liked(current_user.id) %>
      <% @like_id = "tweet-like-"+tweet.id.to_s %>

      <%= link_to "", liked_tweets_path(tweet_id: tweet.id), method: :post, remote: true, class: @like_class, id: @like_id %>

      <% if tweet.liked_tweets.count > 1 %>
        <span><%= tweet.liked_tweets.count %></span>
      <% end %>



      <!-- <a href="#" class="like-tweet glyphicon glyphicon-star"></a> -->
      <a href="#">Retweet</a>
    </div>

    <%= render 'tweets/form', parent: tweet  %>

  </div>

  <div class="replies">
    <!-- Here goes ajax resposnse tweets#show_resplies -->
  </div>

</div>

我想实现当我点击“.tweet”时我想做这个动作tweets_show_replies_path(parent: tweet, active: false )。当我试图将整个内容包装在 link_to .... do ... end 中时,它失败了并且 link 没有包装“.tweet”元素。

能告诉我如何实现我上面描述的效果吗?

使用一些 javascript 和一个 ajax 请求!

$(document).ready(function() {
  $( ".tweet" ).click(function() {
    $.ajax({
      type: "POST",
      format: "js",
      url: <url for tweets_show_replies_path>,
      data: {
        parent: <%= tweet %>,
        active: false
      },
      dataType: "script"
    });
  });
});

然后在您的控制器中,执行您需要的任何操作并渲染局部。