gpt4 book ai didi

ruby-on-rails - 避免嵌套资源并仍然创建正确的引用

转载 作者:行者123 更新时间:2023-12-04 04:56:07 26 4
gpt4 key购买 nike

我是 Ruby On Rails 的新手,并按照 RoR 指南创建了一个博客:http://guides.rubyonrails.org/getting_started.html

根据不同的文章,我应该避免将资源嵌套在一层以上。 ( http://guides.rubyonrails.org/routing.html#nested-resources 2.7.1)

他们引用了这篇关于最佳实践的文章:http://weblog.jamisbuck.org/2007/2/5/nesting-resources

如果现在我的项目中没有嵌套资源,我该如何正确创建表单以正确设置引用?

我的 routes.rb 文件

Monitoring::Application.routes.draw do
resources :companies
resources :jobs
root :to => 'companies#index'

公司.rb
class Company < ActiveRecord::Base
attr_accessible :name
has_many :jobs, :dependent => :destroy
end

工作.rb
class Job < ActiveRecord::Base
belongs_to :company
attr_accessible :interval, :name
end

一份工作属于一家公司。

_form.html.erb 在作业 View 文件夹中
<%= form_for @job, :html => { :class => 'form-horizontal' } do |f| %>
<div class="control-group">
<%= f.label :name, :class => 'control-label' %>
<div class="controls">
<%= f.text_field :name, :class => 'text_field' %>
</div>
</div>
<div class="control-group">
<%= f.label :interval, :class => 'control-label' %>
<div class="controls">
<%= f.number_field :interval, :class => 'number_field' %>
</div>
</div>

<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
jobs_path, :class => 'btn' %>
</div>
<% end %>

为了实际创建工作并引用其公司,我尝试了以下代码
  def new
@company = Company.find(params[:company])
@job = @company.jobs.build

respond_to do |format|
format.html # new.html.erb
end
end

是否有任何开源示例代码演示创建没有嵌套对象的新对象?

现在,创建新工作时公司参数设置不正确,这意味着我无法从那里获取公司以创建工作。我如何创建一个正确引用其公司的新工作?

最佳答案

如果不进行嵌套路由,您应该只在带有公司 ID 的表单中删除一个隐藏的输入。

<%= f.hidden_field :company_id, value: @company.id %>

但是,这显然很容易被客户端破解。如果权限是一个问题,那么您应该将其设置为服务器端:
@job = Job.new(company_id: @company.id)

如果您需要进行批量分配:
@job = Job.new(params[:job].merge(company_id: @company.id))
#or do it after the fact
@job = Job.new(params[:job])
@job.company_id = @company.id

顺便说一句,我认为嵌套 2 级甚至 3 级深度的资源没有固有的问题。这真的是一个个案的事情。对我来说,决定嵌套级别时的两个主要考虑因素是 1) 如何访问 url 2) 我的对象图是什么样的;在处理链接和表单时,我是否总是有父模型?

关于ruby-on-rails - 避免嵌套资源并仍然创建正确的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com