我对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,我很想知道它是什么。
感谢您的时间。
答案 0 :(得分:1)
获得该ID的三种最简单的方法是:
使用隐藏的表单字段传入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])
您可以使用嵌套表单组合添加块和服务器场的过程。请查看http://railscasts.com/episodes/196-nested-model-form-part-1了解如何执行此操作。
您可以使用嵌套的RESTful资源来确保在块控制器中始终可以访问服务器场ID。有关如何执行此操作的详细信息,请参阅http://railscasts.com/episodes/139-nested-resources