找到嵌套属性的id

时间:2011-11-16 06:39:54

标签: ruby-on-rails-3

我对RoR很新,所以这可能是非常基础的。我的结构不断深入,我无法弄清楚如何找到id。

首先,您拥有一个可以拥有多个用户的公司。用户登录并进行身份验证,并使用会话将current_user保存在cookie中。

由于用户有一家公司,我总能通过current_user找到Company.id。

接下来公司有很多农场。在农场中创建我可以从用户cookie获取公司ID,并且农场ID是新的,因此可以工作,并且在农场显示Rails知道它应该显示哪个农场。所以这个级别有效。

现在我想补充一点,Farm有很多块。我通过相关的Farm show页面添加了Blocks,但Blocks_controller不知道它所在的农场页面(据我所知,是否可以获得任何信息)。

以下是适用的FarmsController创建:

  def create
    company_id = current_user.company_id
    @company = Company.find(company_id)
    @farm = @company.farms.build(params[:farm])
    if @farm.save
      flash[:success] = "farm created"
      redirect_to root_path
    else
      render 'pages/home'
    end
  end

这段代码只是抱怨它不知道我在说什么ID:

BlocksController

def create
    @farm = Farm.find(params[:id])
    @block = @farm.blocks.build(params[:block])
end

这显示在相关的农场展示页面上,所以如果有办法捕获ID,我很想知道它是什么。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

获得该ID的三种最简单的方法是:

  1. 使用隐藏的表单字段传入farm_id。创建指向块/新表单的链接时,只需传入farm_id即使用块控制器中的new_blocks_path(:id => @farm.id)之类的路径,您需要确保farm_id设置在Block模型。

    def new
      @block = new Block
      @block.farm_id = params[:farm_id]
    end
    

    然后,如果您使用farm_id字段的表单(可能是隐藏类型),它应该包含正确的id。现在将“创建”块方法中的第一行更改为

    @farm = Farm.find(params[:block][:farm_id])
    
  2. 您可以使用嵌套表单组合添加块和服务器场的过程。请查看http://railscasts.com/episodes/196-nested-model-form-part-1了解如何执行此操作。

  3. 您可以使用嵌套的RESTful资源来确保在块控制器中始终可以访问服务器场ID。有关如何执行此操作的详细信息,请参阅http://railscasts.com/episodes/139-nested-resources