2013-09-26 2 views
0

Я следил за Railscast episode #262 учебник по родословной. Но когда я представляю свою форму, журнал рельсы сервер говорит, что parent_id пуст:Rails и ancestry - form отправляет родительский_идентификатор

rails server журнала:

Started POST "/posts/1/comments" for 127.0.0.1 at 2013-09-26 16:14:59 +0200 
Processing by CommentsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"9+9U/etsazbrJxwWah/eRD9v3fKBnjpy+y5s+g7N/Bw=", "comment"=>{"parent_id"=>"", "author"=>"some name", "author_email"=>"[email protected]", "author_url"=>"", "content"=>"banane"}, "commit"=>"Post Comment", "post_id"=>"1"} 
    Post Load (0.1ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", "1"]] 
    (0.1ms) begin transaction 
    SQL (0.4ms) INSERT INTO "comments" ("author", "author_email", "author_url", "content", "created_at", "post_id", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["author", "some name"], ["author_email", "[email protected]"], ["author_url", ""], ["content", "banane"], ["created_at", Thu, 26 Sep 2013 14:14:59 UTC +00:00], ["post_id", 1], ["updated_at", Thu, 26 Sep 2013 14:14:59 UTC +00:00]] 
    (38.6ms) commit transaction 
    (0.1ms) begin transaction 
    (0.1ms) commit transaction 
Redirected to http://0.0.0.0:3000/posts/1 
Completed 302 Found in 49ms (ActiveRecord: 39.4ms) 

comments_controller.rb:

def new 
    @comment = Comment.new 
    @comment.parent_id=params[:parent_id] 
end 

def create 
    @post = Post.find(params[:post_id])  
    @comment = @post.comments.create(params[:comment].permit(:author, :author_email, :author_url, :content, :parent_id)) 

    respond_to do |format| 
    if @comment.save 
     stuff 
    else 
     other stuff 
    end 
    end 
end 

def comment_params 
    params.require(:comment).permit(...some stuff..., :parent_id) 
end 

comment.rb:

class Comment < ActiveRecord::Base 
    belongs_to :post 
    has_ancestry 
end 

post.rb:

class Post < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments, :dependent => :destroy 
    accepts_nested_attributes_for :comments 
end 

views/posts/show.html.erb:

<% @post.comments.each do |comment| %> 
    <%= show some stuff %> 
    <%= link_to (post_path(:anchor => "respond", :parent_id => comment)) do%> 
    <%= "Reply"%> 
    <% end %> 
<% end %> 
<%= render 'comments/comment_form'%> 

_comment_form.html.erb:

<%= form_for [@post, @post.comments.build], html: { :id => "commentform"} do |f| %> 
<%= f.hidden_field :parent_id %> 
<%= some fields %> 
<%= f.submit "Post Comment"%> 

Rails отладочная информация:

--- !ruby/hash:ActionController::Parameters 
parent_id: '17' 
action: show 
controller: posts 
id: '1' 

Я предполагаю, что нечто случилось с моим методом создания в CommentsController, но я не могу понять, чего не хватает. Итак, я получил эту работу. Я отправлял форму из своего сообщения/шоу, поэтому мне пришлось позвонить @comment = Comment.new(:parent_id => params[:parent_id]) в шоу-шоу пост-контроллера.

+0

Эта строка кажется немного странной - какая здесь переменная 'comment'? '<% = link_to (post_path (: anchor =>" reply ",: parent_id => comment)) do%>' – dax

+0

Я добавил несколько строк в views/posts/show.html.erb. Я думаю, что ссылка отлично работает: «0.0.0.0:3000/posts/1?parent_id=18#respond» я вижу другой идентификатор для разных комментариев – beo

+0

Как вы получаете params [: parent_id] в своем новом действии? Кажется, это неправильно настроено. – BroiSatse

ответ

1

Если вы используете Rails> 3.0.0 попробовать это в комментарии контроллера:

@comment = Comment.new 
@comment.parent_id=params[:parent_id] 

вместо

@comment = Comment.new(:parent_id => params[:parent_id]) 
1

Добавить :parent_id в comment_params в контроллере комментариев.

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