了解rails路由

时间:2016-07-03 23:19:46

标签: ruby-on-rails ruby

我对rails路由的工作原理感到非常困惑。我现在有一个非常简单的应用程序,所以应该很容易调试。这是我的问题 - 我有一个试图调用show动作的控制器,但它似乎覆盖了我在同一个控制器中调用的另一个动作。据我所知,从rake路由可以看出,如果url读取此localhost.com/subscribers/1,它应该呈现我想要查看的订阅者的id,但我也有一个像这样调用的URL {{1所以这些页面现在都没有效果吗?我真的不知道这里发生了什么,所以任何帮助都会很棒!这是我的代码。

CONTROLLER

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

RAKE ROUTES:

    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"

我在这里做了一些根本错误的事吗?请帮帮我!

1 个答案:

答案 0 :(得分:4)

路由器尝试匹配从MAIN STORED PROCEDURE ids = CALL GetListOfIds(_user) FOREACH (id in ids) CALL AnotherStoredProcedure(id) 顶部到底部的路由,并使用匹配的第一条路由。

在您的情况下,routes.rb/subscribers/visit匹配 - 路由器认为这是ID为/subscribers/:id的订阅者的展示操作。

如果您将自定义路径移到路径文件中的visit上方,您将实现您期望的行为。