2015-11-25 1 views
0

Так что я пытаюсь получить идентификатор статьи, чтобы перейти в комментарии.article_id, я посмотрел по всему - и ничего не могу найти (я довольно новый, поэтому я сомневаюсь, что знаю что я ищу) Я пытался за последние пару часов передать идентификатор статей в контроллер комментариев, а затем установить comment.article_id в идентификатор статьи. Вот мой код на данный момент:Ruby on rails get article_id внутри комментариев контроллер

ArticlesController:

class ArticlesController < ApplicationController 
require 'comment' 
def new 
end 

def create 
    @article = Article.new(article_params) 
    @article.user_id = current_user.id 
if @article.save 
    flash[:success] = "Post created successfully!" 
    redirect_to article_path(@article) 
else 
    flash[:danger] = "We could not create you're article!" 
    render 'new' 
end 
end 

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

private 

    def article_params 
     params.require(:article).permit(:title, :description) 
    end 

end 

Мои комментарии контроллер:

class CommentsController < ApplicationController 

def new 

end 

def create 
    @comment = Comment.new(comment_params) 
    @comment.article_id = Article.find(params[:id]) 
    @comment.user_id = current_user.id 
    if @comment.save 
     flash[:success] = "Successfully created comment" 
     redirect_to article_path(@comment.article) 
    else 
     debugger 
     flash[:danger] = "Failed to create comment" 
     redirect_to article_path(2) 
    end 
end 

private 

def comment_params 
    params.require(:comment).permit(:description) 
end 
end 

и мой show.html.erb статей (потому что я делаю все это есть)

<h1 align="center">Title: <%= @article.title %></h1> 

<div class="well col-xs-8 col-xs-offset-2"> 
<div class="row"> 
    <div class="col-xs-4 col-xs-offset-4"> 
     <div class="well well-sm"> 
      <div class="user-img"> 
       <p class="created">Created By:</p> 
       <%= gravatar_for @article.user, size: 150 %> 
      </div> 
      <div class="user-title"> 
       <%= link_to @article.user.username, user_path(@article.user) %> <br /> 
      </div> 
     </div> 
    </div> 
</div> 
<h4 class="center description"><strong>Description:</strong></h4> 
<hr /> 
    <%= simple_format(@article.description) %> 
<div class="article-actions"> 
    <% if logged_in? && current_user == @article.user %> 
    <%= link_to 'Edit', edit_article_path(@article), class: "btn btn-xs btn-primary" %> 
    <%= link_to 'Delete this article', article_path(@article), method: :delete, 
                     data: { confirm: "Are you sure you want to delete this article?" }, 
                     class: "btn btn-xs btn-danger" %> 
    <%= link_to 'View all articles', articles_path, class: "btn btn-xs btn-success" %> 
    <% else %> 
    <%= link_to 'View all articles', articles_path, class: "btn btn-xs btn-success" %> 
    <% end %> 
</div> 

<% @article.comment.each do |f| %> 
<div id="commentBorder"> 
<div class="panel panel-default"> 
    <div class="panel-body"> 
     <p><%= f.description %></p> 
    </div> 
    <div class="panel-footer"> 
     <div align="center"> 
     <small>Created by <%= f.user.username %>,<br /> 
        <%= time_ago_in_words(f.created_at) %>  ago</small></div> 
    </div> 
</div> 
</div> 
<% end %> 

<%= form_for(@comment, :html => {class: "form", role: "forms"}, :url => article_comments_path(@article)) do |comm| %> 

<%= comm.label :description %> 
<%= comm.text_field :description %> 

<%= comm.submit "Post comment" %> 

<% end %> 
+0

Просто, чтобы добавить я где-то есть article_id: https: //i.gyazo.com/fe49dcebbe75c006e95c7f44a9964865.png – StormViper

ответ

2

Решение!

Так играть вокруг некоторых более буквально через пять минут после этого, внутри моего Комментарии контроллера, я изменил @comment.article_id = Article.find(params[:id]) В

@comment.article_id = params[:article_id] 

Это установил ее, у меня есть теория о том, как так, поправьте меня, если я ошибаюсь , С этой картинки вы можете видеть, что у нас уже есть article_id как параметр (https://i.gyazo.com/fe49dcebbe75c006e95c7f44a9964865.png) Используя params [: article_id], мы достигли и получили параметр article_id и присвоили его нашему значению @ comment.article_id.

+1

Ваше понимание точное. У вас есть параметр, содержащий идентификатор статьи. То, что вы либо хотите сделать, это установить значение @ comment.article_id равным этому значению или установить значение @ comment.article равным статье с этим идентификатором. Ошибка, которую вы делали, заключалась в том, что вы пытались сделать @ comment.article_id равным статье (когда предполагается, что это целое число, предположительно). Если вы столкнулись с проблемами с сильными параметрами, вам может потребоваться вместо этого указать '@comment.article_id = Article.find (params [: article_id]). Id '. – ConnorCMcKee

+0

Ваша теория верна, вы просто назначаете значение этому полю. Ответ Шарлисисто более безопасен, хотя по той причине, о которой он упомянул. Вы не хотите разрешать кому-либо назначать ассоциацию статей, не гарантируя, что статья существует. –

4

Просто чтобы быть ясно, о рельсах ассоциациях, вы также могли бы сделать:

@comment.article = Article.find(params[:article_id]) 

Это имеет преимущество обеспечения article существует перед установкой его значение идентификатора к comment.article_id

Смежные вопросы