【问题标题】:Rails, trying to run a method from one controller to another gives Unknown FormatRails,试图从一个控制器运行一种方法到另一个控制器给出未知格式
【发布时间】:2023-04-04 00:48:01
【问题描述】:

好的,所以基本上我上传了一张图片,我只想在上传图片时重新加载我的部分。

每种语言都有许多图像。 (应用的奇怪结构,是的。)

我想从 images_controller 的方法重定向到 language_controller 的方法。

在我的 images_controller:

def create
    @image = Image.new(image_params)

    if !params[:image][:image].nil?
        if @image.save(image_params)
            @language = Language.find(params[:image][:language_id])
            @language.increment(:last_position)
            @language.save

            redirect_to load_language_partial_path(@language),:remote => true

        end
    else
        respond_to do |format|
            format.js {render :action => 'required_fields'}
        end
    end         
end

还有我的languages_controller上的方法:

def load_partial
    @language = Language.find(params[:id])
    @image = Image.new
    @images = @language.images.order(priority: :asc)

    respond_to do |format|
        format.js
    end
end

问题是当我从我的视图中的链接运行加载部分时,它运行完美,但它给了我

ActionController::UnknownFormat (ActionController::UnknownFormat): app/controllers/languages_controller.rb:10:in `load_partial'

我尝试删除 :remote = > true,但还是一样。

我想要做的不是一个好习惯吗?我应该尝试其他方式吗?

感谢阅读。

编辑 在我的语言部分中,我得到了一个表单,我在其中为@image 调用 create 函数

<%=form_for @image , url: images_create_path, remote: true, multipart: true, authenticity_token: true, html: {class: "form-horizontal", :style=> "" } do |f|%>
    <h3 class="" style="float:left;margin-top:5px;"> Upload Image: </h3> 
    <div style="">
    <span>
    <%= f.file_field :image, :class => 'btn btn-default', 'data-show-upload' => false, :accept => 'image/*', :style=> 'margin-left:10px; float:left' %>

    <%= f.number_field :language_id, :value=> @language.id, :style=> 'display:none' %>
    <%= f.number_field :priority, :value=> @language.last_position, :style=> 'display:none' %>
    </span>
    <span>
    <%= submit_tag "Upload",:class => 'btn btn-primary', :style=> "margin-left:10px;height:44px" , data: { disable_with: "Uploading..." } %>
    </span>
    </div>
<% end %>

还有我的 load_partial.js.erb

$('.page-content').html('<%= j(render partial: "/languages/languagePartial") %>')

【问题讨论】:

    标签: ruby-on-rails ruby ajax model-view-controller


    【解决方案1】:

    代替

    redirect_to load_language_partial_path(@language),:remote => true
    

    试试:

    protocol = 'https://' or 'http://'
    redirect_to protocol: protocol, controller: "languages", action: "load_partial", format: "js", languages: @language
    

    您可以根据需要跳过协议部分。我只是给了它,因为我将它用于我的目的。所以你只能使用:

    redirect_to controller: "languages", action: "load_partial", format: "js", languages: @language
    

    languages 末尾是你要传的参数,可以传多个参数也用逗号(,)隔开。

    【讨论】:

    • 你创建了 load_partial.js.erb 吗?
    • 如果您有 js.erb 文件,请尝试从 load_partial 操作中删除 respond_to 块。
    • 问题出在您的客户端。当它接收到 Ajax 响应时,它不会将其作为 javascript 执行。它正在将其作为文本执行。所以你能提供你是如何调用 images_controller:create 动作的吗?也请提供 load_partial.js.erb。
    • 试试:$('.page-content').appned('')....... ......................请注意,我已将 .html 替换为 .append。
    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多