System komentarzy a parametry

Witam
Piszę prostego bloga w railsach i mam mały problem. Tak wygląda migracja komentarzy:

[code]class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :name
t.string :content
t.integer :post_id
t.timestamps
end
end

def down
drop_table :comments
end
end[/code]
A tak wygląda widok z formularzem dla tworzenia komentarza dla określonego posta:

[code]<%= @post.comments %>

Show Post

  • Tytuł : <%= @post.title %>
  • Autor : <%= @post.author %>
  • Treść : <%= @post.content %>
  • Komentarze:
      <% @post.comments.each do |comment| %>
    • <%= comment.content %>
    • <% end %>

<%= link_to “Skasuj”, @post, :method => :delete %>

<%= link_to “Edytuj”, edit_post_path(@post) %>

<%= form_for(Comment.new) do |f| %>

<%= f.label :name, 'Tytuł' %>
<%= f.text_field :name %><br />

<%= f.label :content, 'Autor' %>
<%= f.text_area :content %><br />

<%= f.submit %>

<% end %>[/code]
W formularzy nie ma pola post_id, ponieważ nie chcę żeby użytkownik określał dla jakiego posta ma być komentarz - ma to być robione bez jego wiedzy. Tu moje pytanie: czy mogę dodać do formularza jakieś pole, którego nie widać, a którego wartość będzie równa zawsze id danego posta? Wartość id posta mógłbym wziąć z adresu www, ponieważ ma postać: /posts/:id, tylko, że nie wiem jak to napisać

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-hidden_field

ojojo ale to w ogóle od początku do końca zły pomysł :wink:

zrób comments jako sub-resource posts w ten sposób:

# /config/routes.rb resources :posts do resources :comments end
to utworzy ci URL-e:
/posts i /posts/[post_id]/comments

[code=ruby]# /app/controllers/posts_controller.rb
class PostsController < ApplicationController
def show
@post = Post.includes(:comments).find(params[:id]) # to całe
@comment = @post.comments.build # lepiej przenieść do modelu
end
end

/app/controllers/comments_controller.rb

class CommentsController < ApplicationController
def create
@comment = Post.find(params[:post_id]).comments.build(params[:comment])

if @comment.save!
  # ...
end

end
end[/code]

[code=html]# /app/views/posts/show.html.erb
<% @post.comments.each do |comment| %>

<% end %>

<% form_for @comment do |f| %>

<% end %>[/code]
pisane z palca, więc gdzieś może być błąd :wink:

Wielki dzięki dziamber & zlw. Od razu zabieram się do studiowania twojego kodu zlw :slight_smile:

Generalnie to co napisał zlw jest na guidesach - to co chcesz osiągnąć, czyli posty i komentarze są tam dokładnie opisane:
http://guides.rubyonrails.org/getting_started.html