Ruby on rails 如何在Rails中构造控制器,以便在表单提交中创建多个模型?

Ruby on rails 如何在Rails中构造控制器,以便在表单提交中创建多个模型?,ruby-on-rails,Ruby On Rails,我正在构建一个Rails应用程序Rails 4.1.0,在组织表单逻辑时遇到了一些问题。我认为这是因为我基本上缺少一些关于Rails路由和如何处理它的知识,所以如果这个问题是基本的,我很抱歉 这就是my routes.rb的外观: Rails.application.routes.draw do resources :users do resources :addresses resources :appointments resources :boxes do

我正在构建一个Rails应用程序Rails 4.1.0,在组织表单逻辑时遇到了一些问题。我认为这是因为我基本上缺少一些关于Rails路由和如何处理它的知识,所以如果这个问题是基本的,我很抱歉

这就是my routes.rb的外观:

Rails.application.routes.draw do
  resources :users do
    resources :addresses
    resources :appointments
    resources :boxes do
      resources :statuses
    end
    resources :statuses
  end
end
用户在登录页上用自己的姓名、电子邮件和密码注册。之后,他们会立即收到一个表单,在该表单中,他们可以使用“我的表单”中的字段_创建约会并添加地址-请参见下文。此表单与将来所有约会请求使用的表单相同。此外,每次用户提交约会请求时,都会向数据库中添加一些框,并将它们与该用户绑定

我的问题是,我在哪里处理此表单提交的所有逻辑?在登录页上,我有创建新用户的表单。但是,每次我添加新约会时,我是否也会将表单提交给用户控制器的create方法?这似乎不是正确的方法,因为我正在创建一个约会,并可能创建/更新地址

我很熟悉的领域,我正在使用它在我的形式。这是用户在注册后立即看到的表单,并被发送到他们的仪表板,该仪表板现在是/users/show/:id。我现在已经在模式中呈现了它

<%= form_for(@user) do |f| %>

  <%= f.fields_for :appointments do |appt| %>
    <%= appt.date_select :appointment_date %>
    <%= appt.time_select :appointment_start_time %>
    <%= appt.time_select :appointment_end_time %>
    <%= appt.text_area :comments %>
  <% end %>

  <%= f.fields_for :addresses do |addr| %>
    <%= addr.text_field :street_address %>
    <%= addr.text_field :street_address_optional %>
    <%= addr.text_field :city %>
    <%= addr.text_field :state %>
    <%= addr.number_field :zip_code %>
    <%= addr.check_box :primary %><%= builder.label :primary %>
  <% end %>

  <%= f.submit "Sign Up" %>

<% end %>
这就是我的UsersController看起来的样子。除了更改show方法外,我还没有对其执行任何操作:

class UsersController < ApplicationController
  # GET /users/1
  # GET /users/1.json
  def show
    @user = current_user
  end

  # GET /users/new
  def new
    @user = User.new
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        sign_in @user
        format.html { redirect_to new_appointment_url, notice: 'User was successfully created.' }
        format.json { render :new, status: :created, location: @appointment }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
end
以下是我的模型:

class User < ActiveRecord::Base
  has_many :addresses, dependent: :destroy
  has_many :boxes, dependent: :destroy
  has_many :statuses, dependent: :destroy
  has_many :appointments, dependent: :destroy

  accepts_nested_attributes_for :addresses, :boxes, :statuses, :appointments
end

class Address < ActiveRecord::Base
  belongs_to :user
end

class Appointment < ActiveRecord::Base
  belongs_to :user
end

class Box < ActiveRecord::Base
  belongs_to :user
  has_many :statuses, dependent: :destroy
end

class Status < ActiveRecord::Base
  belongs_to :box
  belongs_to :user
end
您能在控制器中显示您的def user_参数吗?我怀疑它缺少一个:addresses\u attributes组件。它可能看起来像这样我只是在编这些属性:

def user_params
  params.require(:user).permit(:first_name, :last_name, addresses_attributes: [:street, :city, :state]
end

如果需要手动处理任何内容,请在模型层中执行。但是,接受\u嵌套的\u属性\u应该为您完成所有工作。你到底遇到了什么问题?在我的用户控制器的创建方法中,我有在提交新用户表单后创建新用户的逻辑。我应该把这个新表单的逻辑也放在create方法中吗?或者我应该把它放在别的地方?因为我的所有其他模型都属于用户,所以在我的应用程序中将有多个地方我以嵌套形式提交数据。所有这些嵌套表单是否也应该在create方法中包含它们的逻辑?或者他们会在用户控制器中使用其他方法吗?我很难准确地理解我将把这个表单放在哪里。谢谢你的帮助!