Ruby on rails Rails重定向到post方法?
但我得到了错误,因为redirect_发送GET方法我想将此方法更改为'POST',redirect_中没有:method选项,我该怎么办?我可以在不重定向到的情况下执行此操作吗 编辑: 我在groups/invite.html.erb中有这个Ruby on rails Rails重定向到post方法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,但我得到了错误,因为redirect_发送GET方法我想将此方法更改为'POST',redirect_中没有:method选项,我该怎么办?我可以在不重定向到的情况下执行此操作吗 编辑: 我在groups/invite.html.erb中有这个 redirect_to :controller=>'groups',:action=>'invite' 重定向_以使用GET方法请求此操作后,它将调用组中的show action并将invite作为id并给出此错误 redirect
redirect_to :controller=>'groups',:action=>'invite'
重定向_以使用GET方法请求此操作后,它将调用组中的show action并将invite作为id并给出此错误
redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id
我邀请大家一起行动
Couldn't find Group with ID=invite
解决办法是我必须用POST方法重定向这个,但我找不到方法
丑陋的解决办法:我解决了这个我不喜欢的问题。我仍然在等待,如果你有公平的解决办法
我的解决方案是为invite添加路由,以消除“找不到ID为invite的组”错误
在routes.rb中
def invite
@friendships = current_user.friendships.find(:all,:conditions=>"status='accepted'")
@requested_friendships=current_user.requested_friendships.find(:all,:conditions=>"status='accepted'")
@group=Group.find(params[:group_id])
end
创造行动
map.connect "/invite",:controller=>'groups',:action=>'invite'
我用五月份的语言将这个解决方案称为英语中的“amele yontemi”,我想是“手工工人方法”。答案是你不能使用
重定向到来发布帖子
这是因为redirect\u to
所做的只是向浏览器发送一个HTTP 30x重定向头,该头反过来获取目标URL,而浏览器只获取重定向这听起来像是被Rails路由的工作方式绊倒了。此代码:
redirect_to "/invite?group_id=#{@group_member.group_id}"
创建一个类似于/groups/invite?group_id=1
的URL
如果没有routes.rb中的映射,Rails路由器会将其映射到show
操作,而不是invite
。URL的invite
部分映射到params[:id]
,当它尝试在数据库中查找该记录时,失败,您将获得找到的消息
如果您使用的是RESTful路由,那么您已经有了一行如下所示的map.resources
:
<%= link_to "Send invite", group_members_path(:group_member=>{:user_id=>friendship.friend.id, :group_id=>@group.id,:sender_id=>current_user.id,:status=>"requested"}), :method => :post %>
redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id
您需要为邀请添加自定义操作:
map.resources :groups
然后在#invite
方法中将您的引用更改为params[:group_id]
,以仅使用params[:id]我在Rails 3中找到了一个半解决方案,需要它来实现这一点。我创建了一个路由,该路由将调用该控制器中需要post调用的方法。“route.rb”中的一行,例如:
map.resources :groups, :member => { :invite => :get }
这可能很难看,但绝望的时刻需要采取绝望的措施。我只是想和大家分享一下。这个想法是在引擎盖下生成一个带有方法:post的表单时进行“重定向”
我遇到了同样的问题,并将解决方案提取到gemrepost
,因此它为您完成了所有工作,因此无需使用表单创建单独的视图,只需在控制器上使用gem提供的函数redirect_post()
class MyController
应该在rubygems上提供。为什么要这样做?你能提供更多的背景吗?同意,在我们给你一个好的答案之前,我们需要更多关于你试图实现的目标的信息。可能是重复的是的,我知道了,但是有没有办法解决我的问题?
match '/create', :to => "content#create"