나는 블로그를 만드는 중입니다. 몇 가지 유형의 항목 (흥미로운 사이트에 대한 링크 + 간단한 설명, 제목 및 본문 텍스트가있는 전통적인 블로그 게시물, 그림 ... 아이디어를 얻을 수 있음)이 있습니다.Rails 2.3의 외래 키 및 다중 모델 양식 - 버그 또는 기능?
아이디어는 곧은 것 같았다. 그 모든 유형 (생성 시간과 작은 티저/미리보기 텍스트 또는 무언가)에 공통적 인 몇 가지 세부 사항이있는 엔트리 테이블/모델, 그리고 각 엔트리 유형에 대한 표/모델은 엔트리 테이블/모델.
2.3의 새로운 멀티 모델 폼에 대해 this great tutorial에 따라 앱을 설정했습니다.
class Link < ActiveRecord::Base
has_one :entry
accepts_nested_attributes_for :entry
attr_accessible :url, :description, :title, :entry_attributes
end
class Entry < ActiveRecord::Base
belongs_to :link, :dependent => :destroy #adding more types later
end
보낸 사람 Links_Controller.
def new
@link = Link.new()
@link.build_entry
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @link }
end
end
그리고보기 양식 :
<% form_for(@link) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :url %><br />
<%= f.text_field :url %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_field :description %>
</p>
<% f.fields_for :entry do |e| %>
<%= e.label :teaser %><br />
<%= e.text_field :teaser %>
<%= e.text_field(:controller_name, :value => params[:controller].to_s) %>
<% end %>
<p>
<%= f.submit 'Create' %>
난 그냥 내가 항목을 나열하지만, 표시하기에 적합한 컨트롤러를 참조 할 수있는 컨트롤러 이름을 저장하고 새로운 링크 유형 항목을 작성. 작동하는 것처럼 보이지만 (다중 모델 양식이 제출되고 연관된 각 모델의 테이블에 행이 나타남) 외래 키 필드는 모든 항목에 대해 null입니다. 데이터베이스에서 내가 얻을 : 외래 키의 부족은 검색을 어렵게하고있다
mysql> select * from links;
+----+------------+------------------+---------------------+-------------+
| id | entries_id | title | url | description |
+----+------------+------------------+---------------------+-------------+
| 10 | NULL | Snazzy website | www.somewebsite.com | Cool site |
| 11 | NULL | Snazzy website | www.somewebsite.com | Cool site |
| 12 | NULL | Snazzy website | www.somewebsite.com | Cool site |
| 13 | NULL | Snazzy website 2 | www.ab21e312e3c.com | Description |
| 14 | NULL | fk_test | fk_test | fk_test |
mysql> select * from entries;
+----+-----------------+------------------------+---------------------+---------
------------+
| id | controller_name | teaser | created_at | updated_
at |
+----+-----------------+------------------------+---------------------+---------
------------+
| 10 | links | Check it out | 2009-08-11 09:06:47 | 2009-08-
11 09:06:47 |
| 11 | links | Check it out | 2009-08-11 09:08:49 | 2009-08-
11 09:08:49 |
| 12 | links | Check it out | 2009-08-11 09:09:04 | 2009-08-
11 09:09:04 |
| 13 | links | This is interesting... | 2009-08-11 09:27:29 | 2009-08-
11 09:27:29 |
| 14 | links | fk_test | 2009-08-11 20:42:26 | 2009-08-
11 20:42:26 |
+----+-----------------+------------------------+---------------------+---------
------------+
, 그것은 보통 FK 값에 의존하기 때문이다. 몇 가지 질문이 나올 :
- 나는 DHH는 개념적 모델에 속하는 비즈니스 로직과 같은 DB 제약 떨어져 기록을 알고, 그래서 그 작업하기로 또는 뭔가 잘못을 했는가하는 방법이 무엇입니까?
항목 테이블과 링크 테이블에서 ID가 동일하다는 사실을 기반으로 데이터를 가져올 방법을 찾아야합니까?
내가 시도하고있는 것을 수행하는 더 좋은 방법이 있습니까?
감사합니다. Ryan! FK에 대해 당신이 옳았어요. 나는 그 관계를 뒤집었다. 일단 나는 쿼리가 더 의미가 만든 문제의 진정한 원인을 밝혀 것을 고정; 내 테이블은 references : entries 대신 entries : entries로 정의되었습니다. 이제 모든 것이 작동합니다! 시간을내어 답변 해 주셔서 감사합니다. 나는 railscasts BTW의 큰 팬이다. 앞으로도 힘써주세요! – mikewilliamson