Ruby on rails RubyonRails-以一种形式提交评论文本和照片

Ruby on rails RubyonRails-以一种形式提交评论文本和照片,ruby-on-rails,ruby,bootstrap-modal,Ruby On Rails,Ruby,Bootstrap Modal,这是我在这里遇到的第一个问题,我大约在4-5个月前才开始正确地编写代码,所以请友好 我正在尝试使用RubyonRails构建一个简单的评论站点。我希望我的用户能够使用评论表单(在引导模式中)同时提交评论和上传多张照片,但似乎无法通过一个按钮将其提交到两个DB表(表是评论和照片) 目前,用户可以通过表单上的两个单独按钮单独提交照片和评论,但不能同时提交一个按钮。这个双按钮解决方案的问题是,当单击任一按钮并提交表单时,模式关闭。我已经研究过照片上传部分的AJAX,但不确定这是否可行 离开查看按钮,

这是我在这里遇到的第一个问题,我大约在4-5个月前才开始正确地编写代码,所以请友好

我正在尝试使用RubyonRails构建一个简单的评论站点。我希望我的用户能够使用评论表单(在引导模式中)同时提交评论和上传多张照片,但似乎无法通过一个按钮将其提交到两个DB表(表是评论和照片)

目前,用户可以通过表单上的两个单独按钮单独提交照片和评论,但不能同时提交一个按钮。这个双按钮解决方案的问题是,当单击任一按钮并提交表单时,模式关闭。我已经研究过照片上传部分的AJAX,但不确定这是否可行

离开查看按钮,触发模式弹出窗口

<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-normal leave-review-button" data-toggle="modal" data-target="#myModal_<%= @area.id %>">
Leave Review
</button>

 <% if !user_signed_in? %>
  <!-- Modal -->
<div id="myModal_<%= @area.id %>" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Please <%= link_to "login", new_user_session_path %> or <%= link_to "sign up", new_user_registration_path %> to leave a review</h4>
      </div>


  <% else %>

<!-- Modal -->
<div id="myModal_<%= @area.id %>" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Your Review</h4>
        <h5> Leave your honest review below </h5>
        <%= render 'areas/photo_upload_form' %>
      </div>



      <div class="modal-body">
        <%= form_for current_user.reviews.new, html: {multipart: true} do |f| %>
          <div class="form-group text-center">
            <div id="stars"></div>
          </div>
          <div class="form-group">
            <%= f.text_area :comment, rows: 3, class: "form-control" %>
          </div>

            <%= f.hidden_field :area_id, value: @area.id %>
            <%= form_for @area, url: area_photos_path(@area), method: 'post', html: {multipart: true} do |f| %>


          <div class="text-center">
            <%= f.submit "Add Review", class: "btn btn-normal" %>
          </div>

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

  </div>
</div>
</div>

<script>
  $('#stars').raty({
    path: '/assets',
    scoreName: 'review[star]',
    score: 1
  });
</script>

假期回顾
&时代;
请或留下评论
&时代;
你的评论
在下面留下你的真实评论
$(“#星”).raty({
路径:'/assets',
scoreName:“回顾[星]”,
分数:1
});
\u照片\u上传\u表格部分

<%= form_for @area, url: area_photos_path(@area), method: 'post', html: {multipart: true} do |f| %>
  <span class="btn btn-default btn-file text-babu">
     <i class="fa fa-cloud-upload" aria-hidden="true"></i> Select Photos
     <%= file_field_tag "images[]", type: :file, multiple: true %>
  </span>

   <div class="text-center">
     <%= f.submit "Add Photos", class: "btn btn-form" %>
   </div>

<% end %>

选择照片
审查\u controller.rb

class ReviewsController < ApplicationController

  skip_before_action :verify_authenticity_token

  def create

   @area = Area.where(
                    id: review_params[:area_id]
                   ).first

    if !@area.nil?

      @has_reviewed = Review.where(
                        area_id: @area.id,
                        user_id: review_params[:user_id]
                      ).first

      if @has_reviewed.nil?
          # Allow to review
        @review = current_user.reviews.create(review_params)
        redirect_back(fallback_location: request.referrer)
        flash[:success] = "Review created..."
        else
          # Already reviewed
          flash[:success] = "You already reviewed this Area"
      end

    else
      flash[:alert] = "No area found"
    end
  end

  def destroy
    @review = Review.find(params[:id])
    @review.destroy
    redirect_back(fallback_location: request.referrer, notice: "Review successfully deleted")
  end


  private
   def review_params
     params.require(:review).permit(:comment, :star, :area_id, :user_id, :photo)
   end
 end
class PhotosController < ApplicationController

  def create
    @area = Area.find(params[:area_id])


    if params[:images]
      params[:images].each do |img|
        @area.photos.create(image: img, user_id: current_user.id)
      end

      @photos = @area.photos
      redirect_back(fallback_location: request.referer, notice: "Saved...")
    end
  end
end
class-ReviewsController
photos\u controller.rb

class ReviewsController < ApplicationController

  skip_before_action :verify_authenticity_token

  def create

   @area = Area.where(
                    id: review_params[:area_id]
                   ).first

    if !@area.nil?

      @has_reviewed = Review.where(
                        area_id: @area.id,
                        user_id: review_params[:user_id]
                      ).first

      if @has_reviewed.nil?
          # Allow to review
        @review = current_user.reviews.create(review_params)
        redirect_back(fallback_location: request.referrer)
        flash[:success] = "Review created..."
        else
          # Already reviewed
          flash[:success] = "You already reviewed this Area"
      end

    else
      flash[:alert] = "No area found"
    end
  end

  def destroy
    @review = Review.find(params[:id])
    @review.destroy
    redirect_back(fallback_location: request.referrer, notice: "Review successfully deleted")
  end


  private
   def review_params
     params.require(:review).permit(:comment, :star, :area_id, :user_id, :photo)
   end
 end
class PhotosController < ApplicationController

  def create
    @area = Area.find(params[:area_id])


    if params[:images]
      params[:images].each do |img|
        @area.photos.create(image: img, user_id: current_user.id)
      end

      @photos = @area.photos
      redirect_back(fallback_location: request.referer, notice: "Saved...")
    end
  end
end
class photocontroller
您正在为内部表单嵌套表单。这不是做这件事的方法

请查看指南中的示例


说得好,保罗,我没有那样想过。我将尝试使用您发布的指南使其生效。