这只是我的第三个rails应用程序,直到现在它们都非常简单。我一直试图做的就是让“用户”可以添加多个“制造商”,并且每个制造商都可以拥有多个“线”。最终目标是能够找到用户的线路,用户的制造商等。我的控制器上出现“无法找到没有ID的制造商”错误。
我希望用户能够添加制造商,然后在每个制造商处添加新行。这是我的文件,我很难过,我知道这可能是愚蠢的。我还没有尝试使用嵌套表单,只是试着先把关系放下来。
routes.rb中:
resources :manufacturers do
resources :lines
end
devise_for :users
root "pages#home"
get "about" => "pages#about"
match 'users/:id' => 'users#show', :via => "get"
match '/users', :to => 'users#index', :as => "all_users", :via => "get"
match '/users/:name' => 'users#show', via: :get, as: :public_profile
end
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :manufacturers
end
manufacturer.rb
class Manufacturer < ActiveRecord::Base
belongs_to :user
has_many :lines
end
line.rb
class Line < ActiveRecord::Base
belongs_to :manufacturer
end
lines_controller.rb
def new
@manufacturer = Manufacturer.find(params[:id])
@line = @manufacturer.lines.build
end
如果您还需要其他任何文件,请与我们联系。我真的只想让行的_form将manufacturer_id拉到基本的脚手架形式......我想我知道该怎么做。
更新:
应用程序/视图/线/ _form.html.erb
<%= form_for(@manufacturer,@line) do |f| %>
<% if @line.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@line.errors.count, "error") %> prohibited this line from being saved:</h2>
<ul>
<% @line.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :manufacturer_id %><br>
<%= f.text_field :manufacturer_id %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
根据路线设置,我们会为new
执行/manufacturers/:manufacturer_id/lines/new
操作。因此,对于此URI模式,您的LinesController#new
应为:
# app/controllers/lines_controller.rb
def new
@manufacturer = Manufacturer.find(params[:manufacturer_id])
@line = @manufacturer.lines.build
end
更改是使用params[:manufacturer_id]
而不是params[:id]
。