使用关系数据库rails中的param

时间:2014-08-12 23:21:41

标签: ruby-on-rails ruby

我有两个控制器企业和特价商品。他们都有一个商业表和一个特别表。他们是关系型的。控制器Specials有一个名为business_id的列,它连接到数据库Business和该id。我试图这样做,当你点击特价控制器索引视图上的链接时,它转到业务控制器显示视图的业务链接,所以链接是业务/ nameofbusiness

---企业控制器---

class BusinessesController < ApplicationController
    def show
        @business = Business.find(params[:id])
    end
end

---商业模式---

class Business < ActiveRecord::Base
    has_many :specials
end

- 特别控制器

class SpecialsController < ApplicationController
    def index
        @specials = Special.all
    end
    def show
        @special = Special.find(params[:business])
    end
end

- 特殊模式---

class Special < ActiveRecord::Base
    belongs_to :business

end

---特价控制器的索引视图 -

<h1> Specials </h1>

<% @specials.each do |special| %>
<hr />
<h4> <%= link_to special.name, special %> </h1>
    <h6> <%= link_to special.business.business_name, business_path(@special) %> </h6>
    <p> <%= special.description %> </p>
<hr />

<% end %>

2 个答案:

答案 0 :(得分:0)

link_to帮助程序使这非常容易。以这种方式使用它。

<h6> <%= link_to special.business.business_name, special.business %> </h6>

如果您想要路径中的业务名称,则需要执行更多操作。宝石FriendlyId是为此而制作的。 Here's a great (free) railscast on how to use it.

答案 1 :(得分:0)

你必须为此创建一个新的路由,因为business_path将被转换为类似business /:id的东西,所以在你的config / routes.rb中你可以添加:

get "/businesses/:business_name" => "businesses#show", :as => :business_show

当然在你的控制器上你不能再做一个简单的查找,所以你可以使用这样的东西:

@business = Business.find_by_name(params[:business_name])

注意:这里你将有两条不同的params路由到同一个动作(business_path将继续发送带有params [:id]的请求到show动作)并且会因此而出现问题,所以你可以做两件事:

  • 如果您不再使用默认的show route(例如:business /:id),您可以将其添加到路径文件中:

    resources :businesses, except: :show
    
  • 创建一个单独的操作来处理这种请求,因此不要使用show,而是使用show_business。

     get "/businesses/:business_name" => "businesses#show_business", :as => :business_show