Ruby on rails Rails 4-无法修改关联,因为:有多个关联

Ruby on rails Rails 4-无法修改关联,因为:有多个关联,ruby-on-rails,Ruby On Rails,当我尝试提交嵌套表单时,出现以下错误 Cannot modify association 'Appointment#addresses' because the source reflection class 'Address' is associated to 'User' via :has_many 我不完全确定我的设置哪一部分是错误的。简单地说,我的用户有多个约会和多个地址。每个约会都可能发生在不同的地址,这就是为什么我要做一个:通过用户有很多关联(这是正确的,对吗?)。为什么我会犯这个

当我尝试提交嵌套表单时,出现以下错误

Cannot modify association 'Appointment#addresses' because the source reflection class 'Address' is associated to 'User' via :has_many
我不完全确定我的设置哪一部分是错误的。简单地说,我的用户有多个约会和多个地址。每个约会都可能发生在不同的地址,这就是为什么我要做一个:通过用户有很多关联(这是正确的,对吗?)。为什么我会犯这个错误

以下是我的模型:

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

class Appointment < ActiveRecord::Base
  belongs_to :user
  has_many :addresses, :through => :user
  accepts_nested_attributes_for :addresses
end

class Address < ActiveRecord::Base
  belongs_to :user
end
最后,在我看来,这是我的表格:

<%= form_for(@appointment, :url => {:controller => "appointments", :action => "create"}, :html => {"data-abide" => ""}) do |f| %>
      <label>
        Appointment Date
      </label>
      <%= f.date_select :appointment_date %>

      <label>
        Appointment Timeframe Start
      </label>
      <%= f.time_select :appointment_start_time %>

      <label>
        Appointment Timeframe End
      </label>
      <%= f.time_select :appointment_end_time %>

  <%= f.fields_for :addresses do |builder| %>
    <%= builder.hidden_field :user_id, :value => current_user.id %>

        <label>
          Street Address
          <%= builder.text_field :street_address %>
        </label>

        <label>
          Street Address (Optional)
          <%= builder.text_field :street_address_optional %>
        </label>

        <label>
          City
          <%= builder.text_field :city %>
        </label>

        <label>
          State
          <%= builder.text_field :state %>
        </label>

        <label>
          Zip Code
          <%= builder.number_field :zip_code %>
        </label>

        <%= builder.check_box :primary %><%= builder.label :primary %>

  <% end %>

      <label>
        Special Instructions
        <%= f.text_area :comments %>
      </label>

      <%= f.submit "Sign Up", :class => "button expand"%>

<% end %>
{:controller=>“约会”,:action=>“创建”},:html=>{“数据遵守”=>“})do | f |%>
预约日期
预约时间表开始
预约时间结束
当前用户id%>
街道地址
街道地址(可选)
城市
陈述
邮政编码
特别说明
“按钮展开”%>

提前感谢您的帮助:)

一个用户可以有许多约会,但每个约会都在一个地址中。(除非他能找到自己的位置)

所以你应该:

class User
  has_many :appointments

class Appointment
  has_one :address

class Address
  belongs_to :appointments
如果要检索用户预约的地址,必须执行以下操作:

@addresses = current_user.appointments.map {|app| app.address}

谢谢你的帮助!因此,我更改了关联,并在我的
约会
控制器中更新了我的
方法。我确保将模型和控制器中的
:address
更改为
:address
。它现在有以下两行:
@appointment=current_user.appointment.build
@address=@appointment.address.build
(一行接一行)。我还尝试了行
@appointment=current_user.appointments.new
。但是当我访问页面时,我得到了一个错误:
未定义的方法“build”,用于
@appointment.address.build
行的nil:NilClass
。我该到哪里去解决这个问题呢?好吧,没关系,我想出来了。原来我应该使用
build\u address
。谢谢你的帮助!:)
@addresses = current_user.appointments.map {|app| app.address}