2016-05-23 63 views
1

我想从我的控制器直接运行一些JavaScript。Rails,“respond_to do | format |”返回ActionController :: UnknownFormat

我已经创建了我的JS文件中的意见/用品/ create.js.erb

在我articles_controller

def create 
     @article = Article.new(article_params) 
     if @article.save && manage_strings 
      @status = 'success' 
     else 
      @status = 'error' 
      @errormessages= @article.errors.full_messages 
     end 
     respond_to do |format| 
      format.js 
     end 

end 

当我运行我的应用程序的的respond_to做|格式|给我的ActionController :: UnknownFormat

我试图更新我的mime_types.rb与以下行并重新启动我的服务器所建议的其他地方,但没有结果:

Mime::Type.register "application/javascript", :js 

的奇怪的事情是在我的languages_controller以下作品与我的js文件完美搭配views/languages/list.js.erb

def list 
    respond_to do |format| 
     format.js 
    end 
end 

有关什么可能是错在这里的任何想法或建议?

任何帮助表示赞赏。

+1

控制器代码似乎行,该问题可能是与该请求。你可以在'log/development.log'中加入'Processing ..'和'Parameters:'行吗? –

+1

@dyserone你的if-else条件应该在你的respond_to块中。看到我的答案。让我知道它是否有效。 – uday

+1

对于那个创建请求必须是ajax(xhr)请求不是html。 – Amit

回答

1

最可能的解释是请求没有请求JS。为了使导轨将请求视为JS,路径需要以.js结尾或具有正确的AcceptContent-Type标题。不是说mime类型没有用rails注册,因为它注册了javascript最常见的mime类型。

  1. 检查铁轨登录确认:tail -f logs/development.log
  2. 检查错误的浏览器控制台。
  3. 检查具有data-remote="true"属性的表单。

<%= form_for(@thing, remote: true) %> 
+0

我不能相信我的问题很简单,谢谢。 –

1

你的创建动作不应该是这样的吗?

def create 
    @article = Article.new(article_params) 
    respond_to do |format| 
    if @article.save && manage_strings 
     format.html { redirect_to @article, notice: 'Article was successfully created.' } 
     format.json { render :show, status: :created, location: @article } 
    else 
     format.html { render :new } 
     format.json { render json: @article.errors.full_messages, status: :unprocessable_entity } 
    end 
    end 

end 
+0

您的答案似乎更加完整,并且是遵循的良好做法。对不起,没有选择你的,但特定的问题是由马克斯的答案解决。 另外,我想加载一个js文件,会“format.json”工作吗? –

相关问题