Передайте переменную из контроллера для просмотра - PullRequest
9 голосов
/ 15 января 2012

Я веду простой блог по рельсам. У меня есть модель Post и модель Comment. Когда вы создаете комментарий, если комментарий недействителен, я хочу показать ошибку. Как мне это сделать?

модель Сообщение:

#/models/post.rb 
class Post < ActiveRecord::Base
   has_many :comments
   validates :title, :content, :presence => true
end

модель Комментарий:

#/models/comment.rb
class Comment < ActiveRecord::Base
   belongs_to :post
   validates :name, :comment, :presence => true
end

Комментарии Контроллер

class CommentsController < ApplicationController
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment])
    redirect_to post_path(@post)
  end
end

Просмотр для формы комментария:

/ мнения / комментарии / _form.html.erb

<%= form_for([@post, @post.comments.build]) do |f| %>
  <% if @comment.errors.any?  %>
     error! 
  <% end %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :comment %><br />
    <%= f.text_area :comment %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

/ просмотров / сообщений / show.html.erb

<%= render 'comments/form' %>

Как передать @comment из контроллера CommentController для просмотра /post/show.html.erb?

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 15 января 2012

Положите render "posts/show" вместо redirect_to post_path(@post) в вашем CommentsController.

2 голосов
/ 15 января 2012

И / или взгляните на скриншоты Райана Бейтса о вложенных моделях и ресурсах:

Это Rails 2, но чтобы понять, как это работает, все в порядке.

Может быть, вам тоже интересно:

1 голос
/ 15 января 2012

Вы не должны перенаправлять на post_path(@post) , если комментарий недействителен.

class CommentsController < ApplicationController
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.new(params[:comment])

    if @comment.save
      redirect_to post_path(@post), notice: 'Comment was successfully created.'
    else
      render action: "posts/show", error: 'The comment you typed was invalid.'
    end
  end
end

и изменить первую строку формы в /views/comments/_form.html.erb с:

<%= form_for([@post, @post.comments.build]) do |f| %>

to:

<%= form_for([@post, (@comment || @post.comments.build)]) do |f| %>

, тогда вы должны увидеть сообщения об ошибках, когда не удается сохранить.

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