代码之家  ›  专栏  ›  技术社区  ›  Nezir

控制器操作响应格式错误操作控制器::未知信息

  •  0
  • Nezir  · 技术社区  · 7 年前

    我对RubyonRails应用程序中的控制器操作响应有一个问题。

    因此,我在我的TaskAsset_控制器中有两个简单代码的操作:

      def destroy
    
        if params[:id].present?
          @asset = TaskAsset.find(params[:id])
          authorize @asset, :destroy?
    
          @asset.destroy
    
          respond_to do |format|
            format.js { @asset.id }
          end
        end
      end
    
    
    
     def create
        @task = Task.find(params[:task_id])
        authorize @task
    
        respond_to do |format|
          if params[:images]
            params[:images].each { |image|
              @task.task_assets.create(image: image)
            }
          end
            @task_assets = @task.task_assets
            authorize @task_assets, :create?
    
          format.js { @task_assets }
        end
      end
    

    此外,我还经常创建两个表单destroy.js.erb和create.js.erb,如果从表单中删除图像,我会得到已删除图像的响应ID,以便使用信息隐藏图像的模式预览。

    但在创建操作的情况下,我会出错:

    ActionController::UnknownFormat
    Extracted source (around line #14):
    
        authorize @task
    
        respond_to do |format|
          if params[:images]
            params[:images].each { |image|
              @task.task_assets.create(image: image)
    

    创建操作响应格式时缺少什么em?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Kkulikovskis    7 年前

    可能和你在里面做什么有关 respond_to 阻止而不调用 format.[your_format] 第一。

    尝试将代码更改为

    respond_to do |format|      
      format.js do 
        if params[:images]
          params[:images].each { |image|
            @task.task_assets.create(image: image)
          }
        end
        @task_assets = @task.task_assets
        authorize @task_assets, :create?
        render @task_assets
      end
    end
    

    或者其他选择

    if params[:images]
      params[:images].each do |image|
        @task.task_assets.create(image: image)
      end
    end
    @task_assets = @task.task_assets
    authorize @task_assets, :create?
    
    respond_to do |format|      
      format.js { @task_assets }
    end
    

    关键是你唯一能做的事情 respond_to do |format| ... end 是呼叫一个或多个 format.[some_format]{ what_to_do }

    检查 documentation 更多信息

        2
  •  0
  •   Nezir    7 年前

    所以我的解决方案是:

     **<script src="http://malsup.github.com/jquery.form.js"></script>**
    
     **<%= form_for TaskAsset.new, url: task_assets_path(format: :js),remote: true, :html => {remote: true, :multipart => true,id: 'ajaxformtask'  } do |form| %>**
    
       <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
    
       <%= hidden_field_tag 'task_id', task.id %>
       <div class="form-group">
       <div class="col-md-12">
         <label>Select Images</label>
         </div>
         <%= file_field_tag "images[]", id: "imageUploadInput", type: :file, multiple: true, class:'form-control display-block' %>
       </div>
    
       <div class="actions">
       <div class="padding-bottom-3x text-center">
    
         <button type="button" id="cancel-add-task-assets" class="btn btn-lg btn-warning">Cancel</button>
         <%= form.submit "Save", id:"add-task-assets", class: 'btn btn-lg task-btn-color' %>
         </div>
       </div>
     <% end %>
    
     **<script>
       $(document).ready(function(){
           $("#ajaxformtask").ajaxForm()
       })
     </script>** 
    
    1. 添加脚本: http://malsup.github.com/jquery.form.js 进入之内 这里的项目是我们把它放在局部视图上的唯一示例。
    2. 添加表单ID名称和(格式::js)

      {远程: 真,:multipart=>真,id:'ajaxformtask'do form%>
    3. 添加:

      $(document).ready(函数()。{ $(“AjaxFormTask”).AjaxForm())

    下面是创建控制器操作的最终外观:

    def create
    
         @task = Task.find(params[:task_id])
         #@task = policy_scope(@venue.tasks).find(params[:task_id]).decorate
         #authorize @task
         if params[:images]
           params[:images].each do |image|
             @task.task_assets.create(image: image)
           end
         end
         @task_assets = @task.task_assets
         authorize @task_assets, :create?
    
         @result  = [@task_assets, @venue]
    
         respond_to do |format|
             format.json { @task_asset.to_json }
             format.js{ @result }
               #format.js {render js: 'alert("success")'} # now you cann append that image to te image list here or create create.js.erb ...ok I have that alreday let try
           end
    
       end
    
    推荐文章