【问题标题】:Rails, associations, routes, controllers, kerfuffleRails、关联、路由、控制器、kerfuffle
【发布时间】:2012-06-27 13:28:36
【问题描述】:

我的模型

class Client < ActiveRecord::Base
  attr_accessible :name
  has_many :bookings
  validates_presence_of :name
end

class Agent < ActiveRecord::Base
  attr_accessible :name
  has_many :bookings
  validates_presence_of :name
end

class Booking < ActiveRecord::Base
  attr_accessible :booking_time, :agent_id
  belongs_to :client
  belongs_to :agent
  validates_presence_of :booking_time
end

这让我很头疼。我希望从代理和客户双方查看预订,但是预订控制器的索引方法如何处理路由?

agents/agent_id/bookings and clients/client_id/bookings?

第二个问题:只有客户创建预订,但我如何正确维护预订和代理之间的关系?

  def create
    @client = Client.find(params[:client_id])
    @booking = @client.bookings.build(params[:booking])
    @agent = Agent.find(params[:booking][:agent_id])
    @agent.bookings << @booking

    if (@booking.save and @agent.save)
      redirect_to [@client, @booking]
    else
      render :action => "new", :notice => "Booking could not be created"
    end
  end

【问题讨论】:

    标签: ruby-on-rails ruby controller routes


    【解决方案1】:

    至于第一个问题,您只需将其放在您的路线中(config/routes.rb):

    resources :agents do
        resources :bookings
    end
    
    resources :clients do
        resources :bookings
    end
    

    这将在您的 URL 上创建嵌套。有关 Rails 指南的更多信息:http://guides.rubyonrails.org/routing.html

    至于第二个问题:我不确定您要做什么。这实际上取决于您要从代理商和预订中拯救什么。我不知道他们之间的行为是如何运作的。

    您如何测试您的应用程序?

    【讨论】:

    • 感谢您的回答,但它根本没有回答我的问题。我已经完成了您的建议,但问题是 BookingsController 应该如何处理这两个请求。我是否对每种情况都有一个索引方法,一种用于从客户端请求,一种用于从代理端请求。
    • 第二个问题是,创建booking对象时如何正确维护三通关系?
    • 好的。 BookingsController 将有权访问 params[:agent_id]params[:client_id],具体取决于 URL。使用它,您将能够在页面上正确设置您的信息。至于三向关系,您似乎可以在Agent 上使用has_many :clients, through: :bookings,在Client 上使用has_many :agents, through: :bookings。我不知道这是否正是您所需要的,但它是一种创建三向关系的方式。
    • 好吧,如果你会这样做,那对我来说已经足够了。
    • 关于第二个比特,客户端是不知情的代理,在这个阶段,反之亦然。我将再次尝试澄清,我只想在创建 client.bookings 时更新 agent.bookings。你会这样做吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多