Rails file_field不会上传任何内容

时间:2013-05-29 13:42:47

标签: ruby-on-rails carrierwave ruby-on-rails-4

我正在使用Rails 4和带有Carrier Wave的Ruby 2以及jQuery Mobile 1.3,并且用户拥有一个带有徽标的配置文件。我已经在控制台中测试了后端Carrier Wave的东西并且它可以工作。

问题在于形式帮助器,它与我做什么无关,但是文件字段将显示并让我选择一个图像,但它不会在参数中出现。如果我将其更改为不存在的字段,例如。 =f.file_field :field_not_permitted_in_strong_params它没有翻倒并且文件选择器可见,如果我将其更改为=f.text_field :field_not_permitted_in_strong_params,则只会启动rails并抱怨该字段不存在。

所以我的问题基本上是,我可以上传文件客户端,但它不会通过表单数据发送,或者出现在params哈希中,并且我的所有其他字段都能正常工作。

以下是表单的摘录:

= form_for(@business_profile, :html => {:multipart => true}, :url => business_profile_path, :validate => true) do |f|

    =image_tag(@business_profile.logo.url, class: 'business-logo')
    %div{:data => {:role => 'fieldcontain'}}
        =f.file_field :logo

    - # Basic Information
    %div{:data => {:role => 'collapsible', :collapsed => 'false'}}
        %h3
            Basic Information                 
        %div{:data => {:role => 'fieldcontain'}}
            = f.label :name, 'Business name:' 
            = f.text_field :name
        %div{:data => {:role => 'fieldcontain'}}
            = f.label :address, 'Address:'
        = f.text_area :address, class: 'address'

1 个答案:

答案 0 :(得分:6)

确定花了好几个小时后,问题是jQuery Mobile默认使用Ajax提交表单,而且不使用插件等就无法使用Ajax提交文件。 所以解决方案是禁用这样的Ajax:

= form_for(@business_profile, :url => business_profile_path, :validate => true, :html => { :'data-ajax' => false }) do |f|