试图从一个控制器到另一个控制器运行方法的Rails给出了未知格式

时间:2016-09-22 09:40:06

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

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

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

我想从一个方法从images_controller重定向到languages_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:在`load_partial'

我尝试删除:remote =>是的,但同样的事情。

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

感谢阅读。

修改 在我的语言部分,我得到了一个表单,我在其中称为创建函数@image

<%=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") %>')

1 个答案:

答案 0 :(得分: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

最后的语言是您要传递的参数,您可以传递多个参数,也用逗号(,)分隔。