Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails重定向到post方法?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails重定向到post方法?

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_发送GET方法我想将此方法更改为'POST',redirect_中没有:method选项,我该怎么办?我可以在不重定向到的情况下执行此操作吗

编辑:

我在groups/invite.html.erb中有这个

    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的表单时进行“重定向”

我遇到了同样的问题,并将解决方案提取到gem
repost
,因此它为您完成了所有工作,因此无需使用表单创建单独的视图,只需在控制器上使用gem提供的函数
redirect_post()

class MyController

应该在rubygems上提供。

为什么要这样做?你能提供更多的背景吗?同意,在我们给你一个好的答案之前,我们需要更多关于你试图实现的目标的信息。可能是重复的是的,我知道了,但是有没有办法解决我的问题?
match '/create', :to => "content#create"