Rails4:链接到控制器

时间:2013-08-18 19:33:20

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

我有一个用户的显示页面

1。)路线

get 'users/:id' => 'user#show', as: :user

2。)user_controller.rb

class UserController < ApplicationController

before_filter :authenticate_user!, only: :show

def show
    @user = User.find_by_name(params[:id]) # for name instead of id
@listings = @user.listings
end
end

我可以通过“ current_user ”链接到它。

我想创建一个Shop Controller ,所以我按照相同的步骤操作。我生成了一个商店控制器并修改了路线和控制器,如下所示:

1。)路线

get 'users/:id' => 'user#show', as: :user
get 'shop/:id' => 'shop#show', as: :shop

2。)shop_controller.rb

class ShopController < ApplicationController

before_filter :authenticate_user!, only: :show

def show
    @user = User.find_by_name(params[:id]) # for name instead of id
    @listings = @user.listings
end

end

只有当我在用户页面(localhost:3000 / users / test)然后单击指向控制器的链接时才能使用。然后它切换到(localhost:3000 / shop / test)。

如果我尝试点击其他任何地方的链接

enter image description here

链接是 - &gt;

<li><%= link_to "My Shop", :controller => "shop", :action => "show" %></li>

我对Rails相当新手,如果有人能够启发我会非常好的那样:)

1 个答案:

答案 0 :(得分:2)

首先根据rails约定更正控制器的名称。名称应如下所示。

控制器/的 users_controller.rb

class UsersController < ApplicationController

before_filter :authenticate_user!, only: :show

    def show
        @user = User.find(params[:id]) # Because Id can't be same for two users but name can be.
        @listings = @user.listings
    end
end

如果是shop_controller,那很好,因为商店不是模特。

控制器/的 shop_controller.rb

class ShopController < ApplicationController

before_filter :authenticate_user!, only: :show

def show
    @user = User.find(params[:id]) # Id can't be same for two users but name can be.
    @listings = @user.listings
end

end

并提供这样的链接。

<%= link_to "My Wonderful Shop", {:controller => "shop", :action => "show", :id => @user.id} %>

在您的路线文件

get 'shop/:id' => 'shop#show'