2011-11-16 37 views
0

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

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

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

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

现在我想补充一个农场有很多块。我正在通过关联的Farm展示页面添加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

得到那个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

+0

谢谢你,从形式传递ID的隐藏字段是大的一块,我失踪了。 –

+0

很高兴听到。如果它回答你的问题,可以随意标记为:) – Nick