我对rails路由的工作原理感到非常困惑。我现在有一个非常简单的应用程序,所以应该很容易调试。这是我的问题 - 我有一个试图调用show动作的控制器,但它似乎覆盖了我在同一个控制器中调用的另一个动作。据我所知,从rake路由可以看出,如果url读取此localhost.com/subscribers/1
,它应该呈现我想要查看的订阅者的id,但我也有一个像这样调用的URL {{1所以这些页面现在都没有效果吗?我真的不知道这里发生了什么,所以任何帮助都会很棒!这是我的代码。
localhost.com/subscribers/visit
class SubscribersController < ApplicationController
helper_method :sort_column, :sort_direction
def index
@search = Subscriber.search(params[:q])
@subscriber = @search.result
@search.build_condition if @search.conditions.empty?
@search.build_sort if @search.sorts.empty?
end
def show
@subscriber = Subscriber.find_by(id: params[:id])
end
def new
@subscriber = Subscriber.new
end
def create
@subscriber = Subscriber.new(subscriber_params)
if @subscriber.save
@subscriber.touch(:subscription_date)
SubscriberMailer.welcome_subscriber(@subscriber).deliver_now
flash[:notice] = "Subscriber Has Been Successfully Created"
redirect_to new_subscriber_path(:subscriber)
else
render "new"
end
end
def search
@subscriber = Subscriber.new
end
def visit
@subscriber = Subscriber.find_by_phone_number(params[:phone_number])
if @subscriber
@subscriber.visit ||= 0
@subscriber.visit += 1
@subscriber.save
render "visit"
end
end
devise_for :users
resources :subscribers
resources :comments, only: [:new, :create]
get "subscribers/search", to: "subscribers#search"
get "subscribers/visit", to: "subscribers#visit"
root "subscribers#new"
我在这里做了一些根本错误的事吗?请帮帮我!
答案 0 :(得分:4)
路由器尝试匹配从MAIN STORED PROCEDURE
ids = CALL GetListOfIds(_user)
FOREACH (id in ids)
CALL AnotherStoredProcedure(id)
顶部到底部的路由,并使用匹配的第一条路由。
在您的情况下,routes.rb
与/subscribers/visit
匹配 - 路由器认为这是ID为/subscribers/:id
的订阅者的展示操作。
如果您将自定义路径移到路径文件中的visit
上方,您将实现您期望的行为。