Rails View在redirect_to之后不会刷新

时间:2016-09-29 04:06:14

标签: ruby-on-rails ruby redirect

我正在开发一个示例Rails应用程序,该应用程序包含用户,事件(用户创建),最终用户可以订阅/参加这些活动。

我有一个表,当用户点击事件行中的link_to按钮时,用户可以订阅和取消订阅事件。 link_to从event_controller调用一个方法,该方法具有到current_path的重定向,但是当我单击按钮时,视图没有任何反应,但看起来服务器呈现视图。

这是因为我是从event_controller调用它而是使用来自User的show controller吗?

LOG:

 Rendered users/show.html.erb within layouts/application (17.1ms)

用户> show.html.erb

    <% if current_user?(@user) %>
        <td><%= link_to "Delete", e, method:  :delete,
                        data: { confirm: "You sure?" } %></td>
    <% else %>
        <% if attendingEvent?(current_user, e.id) %>
            <td><%= link_to "Not Going", events_remove_event_to_attend_path(event_id: e.id, event_owner_id:@user.id, current_path:request.fullpath), remote: true %></td>
        <% else %>
            <td><%= link_to "I Want To Go", events_add_event_to_attend_path(event_id: e.id, event_owner_id:@user.id, current_path:request.fullpath), remote: true %></td>
        <% end %>
    <% end %>

events_controller.rb

  def add_event_to_attend
    puts attend_params
    puts request.fullpath
    @attend = Attendee.new
    @attend.event_id = (attend_params[:event_id])
    @attend.user_id = current_user.id
    if @attend.save
      flash[:success] = "You created an assocations"
      redirect_to(attend_params[:current_path])
      puts 'saved'
    else
      flash[:danger] = "You did not create the event"
      puts 'not saved'
    end
  end

  def remove_event_to_attend
    @event_to_delete = Attendee.find_by_user_id_and_event_id(current_user.id,params[:event_id])
    @event_to_delete.destroy
    redirect_to(attend_params[:current_path])
  end

2 个答案:

答案 0 :(得分:1)

嗨,欢迎来到Stack Overflow。

首先......我注意到你在代码中放了一些put se ...你在服务器日志/终端屏幕上看到了什么?

其次:你的rjs模板中有什么?你有rjs模板吗?您已将链接设置为远程 - 这意味着您正在发送js请求,并且浏览器只会更改其视图,如果您将其发送回一些js,告诉它这样做。

或者,您可以通过从链接中删除remote: true来快速解决此问题,然后重定向将正常工作...因为它不再是js请求而只是普通请求。

答案 1 :(得分:0)

我也是Ruby on Rails的新手。

我想在Taryn的回答中添加一些东西。也许如果你使用redirect_back fallback_location: asd_path,asd_path是同一页面路径的名称(不是同一个动作),它可以工作。

我希望这会有所帮助,并欢迎使用Rails!我也是新手,但铁轨很容易学习!而我&lt; 3 Ruby,一见钟情。

快速注释:我正在使用Rails 5,所以如果您不使用它,它可能无法正常工作。签入Rails docs(请务必检查您正在使用的版本)