我正在开发一个示例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
答案 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(请务必检查您正在使用的版本)