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

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

CommentsController:

def create
  @story = Story.find(params[:story_id])
  @comment = @story.comments.create(params[:comment])
  if @comment.save
    flash[:success] = "Successfull added comment"
    redirect_to stories_path
  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 %>

В StoriesController я делал то же самое, но теперь не могу понять, как это сделать.

def create
  @categories = Category.all
  @story = current_user.stories.build(params[:story])
end

Ответы [ 2 ]

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

Ошибка: «неопределенный метод для nil: NilClass» всегда, кажется, кусает меня, когда я предполагаю, что модель / класс был создан, когда это не так Если вы получаете эту ошибку на линии:

@comment = current_user.comments.create(params[:comment])

Я бы предположил, что ваш код запускается без входа в систему, поэтому current_user равен nil. Структура вашего кода @comment указывает, что вы только позволите зарегистрированным пользователям создавать комментарии, поэтому вы можете попробовать этот подход:

if current_user
  @comment = current_user.comments.create(params[:comment])
else
  redirect :root, :notice => "Sorry you must be registered and logged in to comment"
end

Надеюсь, это поможет.

0 голосов
/ 03 марта 2012

Я очень глупый! Я пропустил комментарии has_many в пользовательской модели ... но теперь проблема все еще здесь, потому что содержание комментария не может быть сохранено в БД и таблица Комментарии пуста.

@comment.save ложно в моем случае

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...