AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как правильно сделать nested форму на другой view и использовать другой контроллер?

Всем привет, никак не могу понять как организовать nested форму!
Имеем:
Страница /posts/:id/ экшн show, на странице форма для добавления отзыва

<%= form_for([@post, @post.reviews.build]) do |review_form| %>
      <div class="create_review_rb">
      <%= review_form.text_area :body, class: "form-control" %>
      <%= review_form.label :negative, "Положительный отзыв" %>
      <%= review_form.radio_button :negative, 1, checked: true %>
      <%= review_form.label :negative, "Отрицательный отзыв" %>
      <%= review_form.radio_button :negative, 0 %>
      <%= review_form.hidden_field :user_id, value: current_user.id %>
      <%= review_form.hidden_field :for_user_id, value: @post.executor.id %>
      </div>
      <%= review_form.fields_for :post do |f| %>
       <%= f.text_field :final, class: "form-control" %>
       <%= f.label :status, "статус" %>
    <%=f.radio_button :status, 3, checked: true %>
    <%= f.label :status, "статус" %>
    <%=f.radio_button :status, 4 %>
       <% end %>
      <%= review_form.submit "Добавить отзыв", class: "btn btn-large btn-primary", id: 'review_button' %>
    <% end %>


Которая должна проходить через ReviewsController

class ReviewsController < ApplicationController

	def new
		@post = Post.find(params[:post_id])
    	@review = @post.reviews.new
    end

	def create
		@post = Post.find(params[:post_id])
    	@review = @post.reviews.build(review_params)
    	if @review.save
    		flash[:success] = "Поздравляем Ваш отзыв добавлен"
    		redirect_to completed_post_path(@post)
    	else
    		render 'new'
    	end
	end

	private

	def review_params
	   	params.require(:review).permit(:negative, :post_id, :body, :user_id, :for_user_id, post_attributes:[:finalcustomerprice, :status, :id]).merge(:user_id => current_user.id)
	end
end

в модели указал
class Review < ActiveRecord::Base
  belongs_to :post
  belongs_to :user
    accepts_nested_attributes_for :post
end


на всё это rails выдает ошибку Couldn't find Post with ID=41 for Review with ID=
а если убрать accepts_nested_attributes_for :post то не понятно как strong parametrs обойти
  • Вопрос задан
  • 2252 просмотра
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
Ничего не понятно. Может, все же у поста нестет аттрибутс?
И почему форма поста должна сабмитить на ревью? Проверяли вообще, туда ли идет запрос? И видимо ревью у вас без айдишника передается...
А если поста с айди 41 нет, то его и не будет

Сейчас такое ощущение, что у вас сайт отзывов, на котором к каждому отзыву можно привязать пост
Ответ написан
@vsuhachev
1) form_for([@post, @review]) вы же создали @review в обоих методах

2) Насколько я понимаю вы хотите с отправкой каждого review ставить оценку для поста, усредняя ее. Тот путь который вы избрали неверный. Обычно оценку хранят в каждом review и потом вычисляют среднее с помощью функций SQL. Соответственно accepts_nested_attributes_for и fields_for в review не нужны

Вообще полезнее было бы не кидать сюда код и спрашивать что не работает, а описывать конечную задачу которую вы решаете и спрашивать как ее лучше реализовать. Ответов будет больше :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы