繁体   English   中英

Rails路由和对应用程序的http请求

[英]Rails routing and http requests to application

我希望交付控制器接收类似于以下内容的URL参数:

https://www.xxxxx.com/messages/delivery?id=ones1sbn&type=1

我在MessagesController .delivery动作如下所示:

def delivery
  sent_message =  SentMessage.find_by_ref(params[:id])
  if params[:type] == 1
    sent_message.delivery = "Delivered"
    sent_message.save()
  elsif params[:type] == 2
    sent_message.delivery = "Delivery Failure"
    sent_message.save()
  else 
    sent_message.save() 
  end
end

然后路由条目是

resources :messages do
  collection do
    get 'delivery'
  end
end

我无法从传入的HTTP请求中接收信息的原因可能是什么?

消息控制器中的过滤器是

before_filter :authenticate_user!, :except => [:delivery, :show]
load_and_authorize_resource :except => [:delivery, :show]

进行此操作的耙路

 delivery_messages GET        /messages/delivery(.:format)                          messages#delivery

全部更新之后,现在是错误。

Template is missing

Missing template messages/delivery, application/delivery with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :slim, :arb]}. Searched in: * "/var/www/html/webapp/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/activeadmin-0.6.0/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/kaminari-0.14.1/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/devise-3.1.0/app/views"

模板已添加,但仍然没有来自http请求的更新

使用get代替match ,如下所示:

get 'messages/delivery' => 'messages#delivery'

更新

根据您的评论,听起来您的routes.rb文件中有一条宁静的资源路径,该路径在到达get传递行之前首先与URL匹配。 大概是resources :messages

正如我在评论中所说的那样,请记住,路由匹配将按照它们在该文件中出现的顺序进行检查。 您可以将get放在resouces线上方,或尝试以下操作:

resources :messages do
    collection do
        get :delivery
    end
end

那应该将messages/delivery映射到您的MessagesController:delivery操作。 rake routes进行验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM