使用与其无关的方法重新路由

时间:2015-05-11 18:41:11

标签: ruby-on-rails ruby ruby-on-rails-4 routing

在视图中,我调用了一个控制器方法。然而,这似乎与我想要的方法不同。

该视图包括:

<%= link_to("Upgrade account", upgrade_path)

有路线:

  get 'signup/organization' => 'organizations#new',         as: 'register'
  get 'signup/register'     => 'organizations#new_premium', as: 'register_premium'
  post 'signup/register'    => 'organizations#checkout',    as: 'signup_checkout'
  post 'signup/register'    => 'organizations#upgrade',     as: 'upgrade'
  get 'signup/confirmation' => 'organizations#confirmation'

&#39;升级&#39;在我的路线文件中的任何其他位置都不会出现。

因此,视图中的路径应调用以下控制器方法:

  def upgrade
    @organization = current_organization
    @actioncode = Actioncode.new
    @amount = DEFAULT_PRICE
    @currency = "EUR"
    @description = @organization.id
    @transaction_description = "MyDescription"
    @transaction_type = "S"
    @hash = hash(@description, @amount, @currency, @transaction_type)
    render 'checkout'
  end

这应该呈现一个有两种形式的视图(checkout.html.erb)。但是,它会使用消息You're already logged in重新路由到根目录。事实证明,此消息源自以下控制器方法:

  def new_premium
    if (logged_in_user?)
      flash[:danger] = "You're already logged in"
      redirect_to root_url
    end
    @organization = Organization.new
    @member = @organization.members.build
  end

我不知道这种方法是如何发挥作用的,以及为什么我的代码不起作用。有没有人有想法?

控制器还包含def checkout,但我不知道这可能会产生什么效果。行render 'checkout'我希望渲染checkout.html.erb并且与def checkoutdef new_premium没有任何关系......对...?

1 个答案:

答案 0 :(得分:0)

看看你的路线:

post 'signup/register'    => 'organizations#checkout',    as: 'signup_checkout'
post 'signup/register'    => 'organizations#upgrade',     as: 'upgrade'

使用相同动词的相同网址两次。

路由规则是“首次匹配”,所以我猜它们都由checkout处理。

修复很简单,更改其中一个的网址。