Реализовать вложенную форму Rails 3 с помощью has-many посредством ассоциации - PullRequest
0 голосов
/ 27 октября 2011

Я пытаюсь реализовать вложенную форму Rails3 с помощью has-many посредством ассоциации.

Мои отношения модели следующие (Мои модели Project ProjectDuration, ProjectFee).Проект может иметь много продолжительности проекта через project_fees.

Ниже приведены мои модели / таблица

mysql> desc projects;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| title         | varchar(255) | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

class Project < ActiveRecord::Base
  has_many :project_durations, :through => :project_fees
  has_many :project_fees
  accepts_nested_attributes_for :project_fees
end


mysql> desc project_durations;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| duration | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

class ProjectDuration < ActiveRecord::Base
  has_many :projects, :through => :project_fees
  has_many :project_fees
end


mysql> desc project_fees;
+---------------------+----------+------+-----+---------+----------------+
| Field               | Type     | Null | Key | Default | Extra          |
+---------------------+----------+------+-----+---------+----------------+
| id                  | int(11)  | NO   | PRI | NULL    | auto_increment |
| projec_id           | int(11)  | YES  |     | NULL    |                |
| project_duration_id | int(11)  | YES  |     | NULL    |                |
| fee                 | float    | YES  |     | NULL    |                |
+---------------------+----------+------+-----+---------+----------------+

class ProjectFee < ActiveRecord::Base
  belongs_to :projects
  belongs_to :project_durations
end

И мое новое действие projects_controllers выглядит следующим образом

class ProjectsController < AdminsController
  def new
    @project = Project.new
    @project_durations = ProjectDuration.find(:all)
    project_fees = @project.project_fees.build()

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @project }
    end
  end
end

И я наконецУ меня есть следующее представление ( new.erb )

<%= form_for(@project, :html => { :class => :form }) do |f| -%>
     <% @project_durations.each do |duration| %>
      <%= f.fields_for :project_fees do |builder|  %>
        <%= render 'fee_fields', :f => builder, :project => @project, :duration => duration %>
      <% end %>
  <% end %>
<% end -%>

и 'fee_fields' имеет вид

<ul>
  <li>
    <%= duration.duration %>
    <%= f.text_field :fee %>
    <%= f.hidden_field :project_duration_id, :value => duration.id %>
  </li>
</ul>

, хотя это сохраняет данные в таблицу 'project_fees', он не сохраняет данные в поле project_id таблицы project_fees.

Я использую Rails 3 с Ruby 1.8.7 в Linux.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Это был спаситель жизни для меня

http://iqbalfarabi.net/2011/01/20/rails-nested-form-with-has-many-through-association/

0 голосов
/ 27 октября 2011

Предполагая, что ваш вывод MySQL вырезан и вставлен, вы, вероятно, где-то опечатались в миграции. Колонна

projec_id

в вашей таблице project_fees должно быть

project_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...