Я следил за 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])
в шоу-шоу пост-контроллера.
Эта строка кажется немного странной - какая здесь переменная 'comment'? '<% = link_to (post_path (: anchor =>" reply ",: parent_id => comment)) do%>' – dax
Я добавил несколько строк в views/posts/show.html.erb. Я думаю, что ссылка отлично работает: «0.0.0.0:3000/posts/1?parent_id=18#respond» я вижу другой идентификатор для разных комментариев – beo
Как вы получаете params [: parent_id] в своем новом действии? Кажется, это неправильно настроено. – BroiSatse