ruby на рельсах вложенная форма создания - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть модель пользователя, у которой много отзывов, и у каждого отзыва много ответов.

Я хочу разрешить пользователю отвечать по отзыву.

На странице профиля (из контроллера профиля и действия show) я хочу иметь возможность создавать ответы.

<div class="reply-box d-none" id="reply-box">
    <%= form_with(model: Reply, url: new_user_review_reply_path(@user, @review)) do |reply| %>
    <%= reply.hidden_field :user_id, value: @user %>
    <%= reply.hidden_field :review_id, value: @review %>
    <%= reply.text_field :reply_content%>
    <div class="comment-box-btns mb-5">
        <%= reply.submit "submit", class: 'submit-btn d-inline-block ml-2 float-right'%>
        <div class="cancel-btn d-inline-block float-right">cancel</div>
    </div>
    <% end %>
</div>

Вот маршрут. Rb

resources :users do
  resources :reviews do
    resources :replies
  end
end

Вот контроллер ответа:

class RepliesController < ApplicationController
def new
  @user = User.find(params[:user_id])
  @reivew = @user.reviews.find(params[:review_id])
  @reply = @reivew.replies.new
end

def create
  @user = User.find(params[:user_id])
  @reivew = @user.reviews.find(params[:review_id])
  @reply = @reivew.replies.create!(reply_params)
  respond_to do |format|
    format.html {redirect_to(profile_path(param[:user_id]))}
    format.js
  end
end

private
def reply_params
  params.require(:reply).permit(
    :reply_content,
    :user_id,
    :review_id
  )
end
end

Я не знаю, как настроить "form_with". Пока это просто говорит

undefined method `reply_content' for #<Class:0x007f8c7396aaa8>

reply_content - это поле в ответе, которое я хочу создать с помощью text_area.

Я очень смущен. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 апреля 2018

Поскольку вы уже внедрили @reply = @reivew.replies.new в новом действии, поэтому вам следует использовать этот объект @reply с формой ответа, также я не думаю, что вам не нужно явно предоставлять value: user_id и value: review_id

<div class="reply-box d-none" id="reply-box">
    <%= form_for @reply, url: new_user_review_reply_path(@user, @review) do |reply| %>
    <%= reply.hidden_field :user_id %>
    <%= reply.hidden_field :review_id %>
    <%= reply.text_field :reply_content%>
    <div class="comment-box-btns mb-5">
        <%= reply.submit "submit", class: 'submit-btn d-inline-block ml-2 float-right'%>
        <div class="cancel-btn d-inline-block float-right">cancel</div>
    </div>
    <% end %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...