рельсы не могут сохранить представленный результат в БД - PullRequest
0 голосов
/ 03 марта 2012

У меня есть четыре контроллера - пользователи, категории, истории и комментарии. Моя проблема с комментариями. Когда я отправляю комментарий, @ comment.save имеет значение false, и я не могу понять, в чем проблема. Моя таблица в БД для комментариев имеет контент, user_id, story_id. Вот часть моего кода:

def new
  @comment = Comment.new
  @story = Story.find(params[:story_id])
end

def create
  @story = Story.find(params[:story_id])
  if current_user
    @comment = current_user.comments.create(params[:comment])
  end

  if @comment.save
    flash[:success] = "Successfull added comment"
    redirect_to story_path(@story)
  else
    render 'new'
  end
end

show.html.erb для StoriesController:

<b><%= @story.title %></b> <br/><br/>

<%= @story.content %> <br/><br/>

<% @story.comments.each do |comment| %>
  <b>Comment:</b>
  <%= comment.content %>
<% end %>

<%= form_for([@story, @story.comments.build]) do |f| %>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </div>
  <div class="actions">
    <%= f.submit "Add" %>
  </div>
<% end %>

comment.rb:

class Comment < ActiveRecord::Base
  attr_accessible :content, :story_id, :user_id 
  belongs_to :story
  belongs_to :user

  validates :content, :presence => true
  validates :story_id, :presence => true
  validates :user_id, :presence => true

  default_scope :order => 'comments.created_at DESC'
end

story.rb

class Story < ActiveRecord::Base
  attr_accessible :title, :content, :category_id 
  belongs_to :user
  belongs_to :category
  has_many :comments

  validates :title, :presence => true
  validates :content, :presence => true
  validates :user_id, :presence => true

  default_scope :order => 'stories.created_at DESC'
end

UPDATE Когда я использую сохранить! У меня есть сообщение об ошибке Story не может быть пустым.

1 Ответ

1 голос
/ 03 марта 2012

Вам необходимо установить историю для комментария, который вы создаете, поскольку (как вы, очевидно, уже разработали) рассматриваемая история задается params[:story_id]. Идентификатор этой истории волшебным образом не попадет в хэш params[:comment]. Вы могли бы либо сделать

@comment = @story.comments.build(params[:comment])
@comment.user = current_user

или создайте комментарий для пользователя, а затем установите его историю.

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