我想向未登录的用户显示一个“添加到收藏夹”按钮,以便他们可以看到登录的用户可以将帖子(在这种情况下)添加到他们的收藏夹中。
这是当前代码:
路线.rb
resources :users do
resources :favourites
end
resources :favourites, only: [:create, :destroy]
posts_helper.rb (一旦我开始工作,我会移动这个 application_helper)
PostsHelper
def new_favourite
if signed_in?
return current_user.favourites.build
else
return Favourite.new
end
end
end
显示.html.erb
<%= render :partial => 'shared/favourites/favourite_form', :locals => { :object => @post } %>
_favourite_form.html.erb
<% if signed_in? && current_user.favourited?(object) %>
<%= render partial: 'shared/favourites/unfavourite', locals: { object: object } %>
<% else %>
<%= render partial: 'shared/favourites/favourite', locals: { object: object } %>
<% end %>
_favourite.html.erb
<%= form_for(new_favourite, remote: signed_in?) do |f| %>
<div>
<%= f.hidden_field :object_id, :value => object.id %>
<%= f.hidden_field :object_type, :value => object.class.name.demodulize %>
</div>
<%= button_tag(:type => 'submit', :id => 'add_favourite') do %>
Add to Favourites
<% end %>
<% end %>
如果用户未登录,我希望它不执行 ajax 调用(即使用页面重新加载提交添加收藏的表单),以便它会看到用户正在尝试访问受保护的页面,将他们重定向到登录并在成功[当它将他们重定向回他们最初尝试去的地方时]它将添加最喜欢的。
有人可以建议我需要改变什么才能做到这一点。
编辑:
更新代码以反映当前状态。
登录后,它会重定向回,No route matches [GET] "/favourites"
因为它favourites
是 . 下的嵌套资源users
。
编辑2:
重定向的工作方式与 Rails 教程中的几乎相同:
将用户重定向到登录页面 (signed_in_user): http ://ruby.railstutorial.org/book/ruby-on-rails-tutorial#code-correct_user_before_filter
将用户重定向回的存储位置: http ://ruby.railstutorial.org/book/ruby-on-rails-tutorial#code-friendly_forwarding_code http://ruby.railstutorial.org/book/ruby-on-rails-tutorial #code-friendly_session_create
唯一的区别是,在我的登录页面上,我使用 facebook omniauth 链接让用户登录,但登录后的重定向仍然按预期工作。