2012-05-15 2 views
0

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

Я строю сайт для себя, который содержит блог. У меня две вложенные модели, и я, похоже, не понимаю, как использовать 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'%> 

ответ

3

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

render 'articles/show' 

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

UPDATE:

@article = Articles.find(article_id) 
render 'articles/show' 
+1

Точно, вы * визуализации * представления, не путь. Хотя я предполагаю, что это должно быть «рендерить» статьи/показать », потому что, похоже, происходит комментирование. – Mischa

+0

Он работает, если я использую render 'comments/new', если у меня есть вид, названный new под комментариями. Проблема в том, что я хочу отобразить представление, на котором пользователь изначально включен. Я хочу отобразить представление, в котором есть все остальные комментарии. –

+0

@ Миша: Да, вы правы. Исправленный. – Matzi