Я начинаю с Ruby on Rails, и я столкнулся с проблемой ассоциации has_many :through
.Ассоциации рельсов has_many: через
модели я использую является:
class Phrase < ActiveRecord::Base
attr_accessible :event_type_id, :template_pieces
belongs_to :event_type
has_many :phrases_pieces
has_many :template_pieces, :through => :phrases_pieces
end
class TemplatePiece < ActiveRecord::Base
attr_accessible :datatype, :fixed_text, :name
has_many :phrase_pieces
has_many :phrases, :through => :phrases_pieces
end
class EventType < ActiveRecord::Base
attr_accessible :name
has_many :phrases
end
class PhrasesPiece < ActiveRecord::Base
attr_accessible :order, :phrase_id, :template_piece_id
belongs_to :phrase
belongs_to :template_piece
end
И я пытаюсь создать новую фразу, редактируя его форму по умолчанию:
<%= form_for(@phrase) do |f| %>
<% if @phrase.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@phrase.errors.count, "error") %> prohibited this phrase from being saved:</h2>
<ul>
<% @phrase.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
Select the event type:
<%= collection_select(:phrase, :event_type_id, EventType.all, :id, :name) %>
Select the phrases to be used:
<%= collection_select(:phrase, :template_pieces, TemplatePiece.all, :id, :name) %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
я первый был вопрос с мессой Назначение, но я установил, что добавление attr_accessible :template_pieces
к модели фраз. Я не уверен, что это правильный способ его исправления, но, по крайней мере, он переставал жаловаться на то, что он не может назначить защищенный атрибут.
Теперь, я получаю следующее сообщение об ошибке при подаче новой фразы:
неопределенного метода `каждого» для „1“: String
Что я вроде думаю, происходит из-за факт, что предполагается, что для данной фразы должно быть много template_pieces, но в настоящее время я могу только отправить их по одному. Таким образом, он просто находит одно, пытается пройти через него и терпит неудачу.
Как я могу это исправить? Есть ли лучший способ ввода моделей с has_many :through
в базу данных? Нужно ли мне это делать вручную (как в случае отклонения контроллера по умолчанию @phrase = Phrase.new(params[:phrase]
)?
Спасибо!
Было бы полезно иметь полную трассировку стека вместе с ошибкой. – adamdunson
На странице ошибки отображается: [page capture] (https://www.dropbox.com/s/62dat91bx4dh2jg/error_msg.png?m) – snowingheart