3层拉杆模型,拔出我的头发

时间:2014-03-16 03:02:44

标签: ruby-on-rails ruby ruby-on-rails-4

这只是我的第三个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 %>

1 个答案:

答案 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]