2015-04-26 2 views
0

У меня есть объявление, что 'has_many' Комментарии и комментарий 'belongs_to' Отношение анонса. В моем корне я показываю объявления по каждому циклу, и я стараюсь сделать комментарий form_for под каждой новостью.рельсы 4 как передать object_id в form_for?

Моя root_path действие:

def home 
    @announcements = Announcement.page(params[:page]).order('id DESC') 
    end 

А вот мой анонс цикла:

<% @announcements.each do |announcement| %> 
      . 
      . 
      . 
     <div class="create_comment form-inline"> 
       <%= form_for(announcement.comments.build) do |form| %> 
          <%= form.label :author, "Autor:" %> 
          <%= form.text_field :author, class: "form_control" %> 

          <%= form.label :content, "Treść:" %> 
          <%= form.text_field :content, class: "form_control" %> 

          <%= form.submit "Dodaj!", class: "btn btn-primary", url: comments_path %> 

       <% end %> 
     </div> 
    </div> 
<% end %> 

Вот мой комментарий создать действие:

def create 
     @announcement = Announcement.find(params[:comment_id]) 
    @comment = @announcement.comments.new(comments_params) 
    if @comment.save 
     flash[:success] = "Komentarz dodano" 
     redirect_to root_path 
    else 
     render 'static_pages/home' 
    end 
    end 
private 

def comments_params 
     params.require(:comment).permit(:author,:content) 
    end 

Но я получаю ошибку: не мог Объявления без ID

Я знаю, что могу использовать скрытое поле и передавать его в комментарии_params, но это не безопасное решение.

Я только что начал свое приключение Rails. Если кто-нибудь знает, где моя ошибка, попробуйте сделать полное объяснение.

ответ

0

Хорошо с помощью @notulysses Я добрался до решения.

Chenges быть необходимо сделать:

Первый в routes.rb: комментарии должны были быть вложены в объявлении, чтобы присоединиться к собственно.

resources :announcements, only: [:new,:create,:update,:edit,:destroy,:show] do 
    resources :comments, only: [:create, :destroy] 
    end 

Второй в comments_controller Объявление должно найти по announcement_params:

@announcement = Announcement.find(params[:announcement_id]) 

И на третий (и это моя часть :)), мне нужно соответствующим набором в form_for атрибуты.

form_for(announcement.comments.create, url: announcement_comments_path(announcement.id)) 

Нужен url: param, так как root был в другом контроллере, а затем комментарии.

Yupi !!!!

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