【问题标题】:redirect to an anchor in rails 4重定向到 Rails 4 中的锚点
【发布时间】:2015-11-01 22:24:28
【问题描述】:

我一直在这里寻找我的问题的答案,但似乎找不到确切的答案。我正在写博客,如果你喜欢或不喜欢它们,你可以在每篇文章上投票。我正在为我的投票表使用 act_as_votable。我遇到的问题是,一旦您单击喜欢或不喜欢,您就会被重定向到页面顶部,这很烦人,因为您想从原来的位置继续,而不需要从顶部开始。有人告诉我,由于我是新手,所以使用 ajax 太复杂了,所以我想使用 redirect_to 和 anchor,只是让 ID 成为喜欢或不喜欢的故事。长话短说,在阅读了关于这个主题的所有 stackoverflow 之后,我仍然不知道该怎么做。我知道我很接近,但我想我需要一些帮助。

经过更多搜索后,我尝试将锚点转换为使用 ajax,因此每次有人点击喜欢或不喜欢时都不需要重新加载页面。我已经阅读了许多与我相似的 stackoverflow,How to add an anchor to redirect_to :back,这似乎是最相似的,但是我仍然遇到问题。这就是我所拥有的:

故事控制器

def upvote
  @story = Story.find(params[:id])
  @story.upvote_by(current_user)
    respond_to do |format|
    format.html {redirect_to :back}
    format.js { render layout: false }
  end
end

def downvote
  @story = Story.find(params[:id])
  @story.downvote_by(current_user)
  respond_to do |format|
    format.html { redirect_to :back }
    format.js { render layout: false }
  end
end

_story.html.erb

<div class="story_partial" id="story_<%= story.id %>">
  <%= story.content %>
  <div id="downvote_button_<%= story.id %>">
    <%= link_to "dislike", downvote_path, method: "post", remote: true %>
  </div>
</div>

<div class="story_partial" id="story_<%= story.id %>">
  <%= story.content %>
  <div id="upvote_button_<%= story.id %>">
    <%= link_to "like", upvote_path, method: "post", remote: true %>
  </div>
</div>

upvote.js.erb

$('#story_<%= @story.id %>').html('<%= j render @story %>');

index.html.erb

<%= link_to like_story_path(story), method: :post, remote: true, class: "btn btn-warning btn-xs" do %>
That scared me! <span class="text-warning"> </span>  <% end %>(<%= story.get_upvotes.size %>)

#我知道这两个按钮是不同的。我试图找到使它们工作的最佳方法,但都不会自动更新。我需要刷新页面才能更新计数器

<%= button_to dislike_story_path(story), method: :get, remote: true, class: "btn btn-success btn-xs" do %>
You Wimp! <span class="text-warning"></span><% end %>
(<%= story.get_downvotes.size %>)

routes.rb

  resources :stories do
   member do
    post :like, to:'stories#upvote'
    get :dislike, to:'stories#downvote'
  end
end 

一旦我刷新页面,这些按钮就会起作用,但是我希望在您点击喜欢/不喜欢时让喜欢/不喜欢按钮自动更新

感谢任何帮助。

谢谢

【问题讨论】:

  • 这不是您需要的确切答案吗? -> stackoverflow.com/questions/757891/…
  • @Cailou,我已尝试更改此内容以匹配我需要的内容,但出现语法错误。我将其更改为:
  • 语法错误是什么?
  • /home/ubuntu/workspace/scareme/app/controllers/stories_controller.rb:40:语法错误,意外' ^ /home/ubuntu/workspace/scareme/app/controllers/stories_controller.rb:40:未终止的字符串遇到文件结尾/home/ubuntu/workspace/scareme/app /controllers/stories_controller.rb:40:语法错误,意外的输入结束,期待关键字_end
  • 你能发布 stories_controller.rb 第 40 行

标签: ruby-on-rails ruby-on-rails-4 redirect anchor


【解决方案1】:

这是您应该需要的链接的语法:

<%= link_to "Blahblahblah this is a link", story_path(@story) + "#story_#{@story.id}" %>

【讨论】:

  • 感谢 Caillou,我仍然收到与此“故事索引”添加相同的 SyntaxError。只是想,link_to 是否会与 redirect_to 一样,因为我正在寻找人们点击“喜欢”按钮时,它只会在点赞计数器上添加 +1,然后他们可以继续滚动阅读帖子。我只是想确保我在解释我在寻找什么
  • 不,link_to 是在你的视图文件中创建一个链接,redirect_to 是重定向到你控制器文件中的给定地址。所以我给你的link_to是写在你的视图中,以便创建一个链接来加载“故事索引”页面,然后转到“story_x”锚。
  • 如果你想让人们在点击一个按钮后能够继续浏览你的页面,你需要的是一个javascript中的Ajax请求,它可以发送一个post请求而不重新加载页面。
  • 其实,你告诉我的一切都很混乱,也许你应该澄清你的主要帖子......
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 2010-10-07
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多