Рельсы — трассировка при вложении с рельсами — новичок

Я относительно новичок в программировании и на рельсах, поэтому, пожалуйста, будьте снисходительны :)

Я создаю веб-сайт для себя, который содержит блог. У меня есть две вложенные модели, и я, кажется, не понимаю, как использовать REST для выполнения определенных действий с моими статьями и комментариями.

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

Вот код:

Вы также можете найти этот код на github --> https://github.com/MariusLucianPop/mariuslp-

routes.rb

Mariuslp::Application.routes.draw do

  get "categories/new"

  root :to => "static_pages#index"

  match "login" => "visitors#login" # not rest
  match "logout" =>"visitors#logout" # not rest
  match "comment" => "articles#show"

  resources :articles do 
  resources :comments
end

  resources :tags, :taggings, :visitors, :categories, :comments


end

articles_controller.rb

def show
  @article = Article.find(params[:id])
  @comment = @article.comments.new
end

comments_controller.rb

def create
    article_id = params[:comment].delete(:article_id)
    @comment = Comment.new(params[:comment])
    @comment.article_id = article_id
    if @comment.save
      redirect_to article_path(@comment.article_id)
    else
      render article_path(@comment.article_id,@comment) ## This one doesn't work
    end
  end

  def new
    @comment = Comment.new
  end

 def destroy 
    Comment.find(params[:id]).destroy
    redirect_to articles_path()
 end

Просмотры-статьи: _comment.html.erb

<div class="comment">
<%= comment.body %><br />
<%= link_to "Delete Comment", article_comment_path(@article), :method => :delete,    :confirm => "Are you sure you want to delete this comment?" %>
</div>

_comment_form.html.erb

<%= form_for @comment do |f|%>

    <%= f.hidden_field :article_id%>

    <%= f.label :body %><br />
    <%= f.text_area :body, :cols => 50, :rows => 6 %><br />

    <%= f.submit%>
<%end%>

show.html.erb

<p><%= link_to "<< Back to Articles", articles_path%></p>

<div class = "article_show">
    <%= label_tag :category_id %>
    <%= @article.category_id%> <br />

    <%= label_tag :title%>: 
    <%= @article.title%> <br />

    <%= label_tag :body%>: 
    <%= @article.body%> <br />

    <%= label_tag :tag_list%>:
    <%= @article.tag_list%><br />
</div>

<br />
<% if session[:username]== "marius"%>
<div class ="admin">
    <%= link_to "Edit", edit_article_path(@article)%>
    <%= link_to "Delete", article_path(@article), :method => :delete, :confirm => "Are you sure you want to delete this article ?"%>
</div>
<%end%>
<br />



<%= render :partial => 'comment', :collection => @article.comments %>

<%= render :partial => 'comment_form'%>

person Marius Pop    schedule 15.05.2012    source источник


Ответы (1)


Вы пытались использовать, где вы указываете проблему?

render 'articles/show'

Вам не нужно использовать article_comment_path, потому что это полный путь, а не только место, где вы храните шаблоны представлений. В этом случае вам нужен только вид. Конечно, вы должны быть уверены, что получили все переменные экземпляра, которые вы используете в этом представлении.

ОБНОВИТЬ:

@article = Articles.find(article_id)
render 'articles/show'
person Matzi    schedule 15.05.2012
comment
Именно, вы рендерите вид, а не путь. Хотя я предполагаю, что это должно быть render 'articles/show', потому что, похоже, именно здесь происходит комментирование. - person Mischa; 15.05.2012
comment
Это работает, если я использую визуализацию «комментарии/новые», если у меня есть представление с именем «новое» под комментариями. Проблема в том, что я хочу отобразить представление, на котором изначально находится пользователь. Я хочу отобразить представление, в котором есть все остальные комментарии. - person Marius Pop; 15.05.2012
comment
Хорошо, я думаю, я понимаю, что вы имеете в виду. Я тестирую это прямо сейчас. - person Marius Pop; 15.05.2012
comment
@Matzi Это работает, если я визуализирую «статьи/новые», но я получаю другую ошибку неопределенного метода «category_id» для nil:NilClass . Я не уверен, как это преодолеть. - person Marius Pop; 15.05.2012
comment
Как я уже писал в обновленном ответе, вы должны убедиться, что каждая переменная экземпляра загружена тем, что вы используете в представлении. Загрузите их перед рендером. Вероятно, это означает, что вы должны найти @article для article_id. - person Matzi; 15.05.2012