Rails не сохранит мой внешний ключ в базе данных - PullRequest
1 голос
/ 11 октября 2010

Так что в основном у меня есть две модели, Entry и Comment. У меня есть настройки ассоциации, так что у входа много комментариев:

class Entry < ActiveRecord::Base
has_many :comments
end

И комментарий принадлежит записи:

class Comment < ActiveRecord::Base
belongs_to :entry
end

В моей схеме базы данных я настроил таблицу комментариев со столбцом entry_id. Насколько мне известно, это все, что мне нужно было сделать, чтобы установить ассоциацию. Однако, когда я сохраняю комментарий, он не сохраняет entry_id в базе данных.

Я могу подтвердить, что entry_id передается в форме. Вот дамп переменной params, отправляемой в контроллер.

{"comment"=>{"comment"=>"ghgghgh"},
"commit"=>"Create Comment",
"format"=>"",
"entry_id"=>"1",
"authenticity_token"=>"G4uH8smdA2eeKeTXbD9NbenKH4AbWLyJuPWQzRcn6CI=",
"utf8"=>"✓"}

Есть идеи?

EDIT: Это мой взгляд со встроенной формой комментария:

<% @entry.each do |e| %>
<div class="entry">
<p><%= e.entry %></p>
<small>Posted by <%= e.author %> at <%= e.created_at.strftime("%I:%M%p %m/%d/%Y") %></small>
<% if e.comments.nil? %>
    <p>No Comments</p>
<% else %>
    <% e.comments.each do |c| %>
    <blockquote><%= c.comment %></blockquote>
    <% end %>
<% end %>
<%= form_for @comment, :url => entry_comments_path(e, @comment) do |f| %>
<%= f.label :comment %>
<%= f.text_area :comment %>
<%= f.submit %>
<% end %>
</div>
<hr />
<% end %>
<%= button_to "Write A Message", new_entry_path, :method => :get %>

У меня есть комментарии как вложенный маршрут:

  resources :entries do
resources :comments
  end

1 Ответ

2 голосов
/ 11 октября 2010

entry_id отсутствует в вашем комментарии в ваших параметрах. Вам нужно иметь:

 {"comment"=>{"comment"=>"ghgghgh", "entry_id"=>"1"},
"commit"=>"Create Comment",
"format"=>"",
"authenticity_token"=>"G4uH8smdA2eeKeTXbD9NbenKH4AbWLyJuPWQzRcn6CI=",
"utf8"=>"✓"}

В вашей форме вы должны указать entry_id в комментариях. комментарии [entry_id]

Если вам нужна дополнительная информация, нам нужен ваш взгляд.

У вас есть два варианта

1) добавьте entry_id в форму

<%= form_for @comment, :url => entry_comments_path(e, @comment) do |f| %>
<%= f.label :comment %>
<%= f.text_area :comment %>
<%= f.hidden_field :entry_id, e.id
<%= f.submit %>

2) добавьте его в свое действие создания

def create
  Comment.create(params[:comment].merge(:entry_id => params[:entry_id])
end

У вас есть эта проблема, потому что вы вложили свою форму.

...