简体   繁体   中英

Ruby On Rails - link_to creating wrong url

Basic help here but I'm new to Ruby On Rails. Rails version 4.1.7 on Windows 7.

I expect to see different urls created for the links. Code and problem description are below.

Thanks for any help!

-T

Controller:

class DemoController < ApplicationController
    layout false

    def index
    end

    def hello
        #render('hello')
        @array = [1,2,3,4,5]
    end

    def other_hello
        redirect_to(:controller => 'demo', :action => 'index')
    end

    def lynda
        redirect_to("http://lynda.com")
    end
end

routes.rb:

Rails.application.routes.draw do
    root "demo#index"
    #get 'demo/index'
    match ':controller(/:action(:id))', :via => :get
end

index.html.erb('/demo/index'):

<h1>Demo#index</h1>
<p>Hello From Index</p>
<a href="/demo/hello">Hello Page 1</a><br />
<%= link_to( "Hello page 2c", {action: "hello" })%> <br />
<%= link_to("Hello with Parameters", {action:"hello", page: 5, id: 20}) %>

rake routes: output

Prefix Verb URI Pattern Controller#Action root GET / demo#index GET /:controller(/:action(:id))(.:format) :controller#:action

Resulting source from index.html:

<h1>Demo#index</h1>
<p>Hello From Index</p>

<a href="/demo/hello">Hello Page 1</a><br />
<a href="/demo">Hello page 2c</a> <br />
<a href="/demo/hello20?page=5">Hello with Parameters</a>

Problem:

I expect the "Hello page 2c" link to have an href of "/demo/hello".

I also expect the "Hello with Parameters" link to have an href of "/demo/hello/20?page=5"

Not sure what to look at further.

I've tried different ways to format the link_to but they all give the same result.

EX:

<%= link_to( "Hello page 2c", {:action => "hello" })%> <br />
<%= link_to("Hello with Parameters", {:action => "hello", page: 5, id: 20}) %><br />

<%= link_to "Hello page 2c", action: "hello" %> <br />
<%= link_to "Hello with Parameters", action: "hello", page: 5, id: 20 %><br />

<%= link_to( "Hello page 2c", {controller: "demo", action: "hello" })%> <br />
<%= link_to("Hello with Parameters", {controller: "demo", action:"hello", page: 5, id: 20}) %><br />

You are using rails routes the wrong way. You shouldn't use the catch all route. Write an explicit route for each controller action that is available to user. You can read more about routing here .

Try editing your route rule as follows.

match ':controller(/:action(/:id))', :via => :get

Thanks

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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