【问题标题】:ActionController::UnknownFormat with respond_to js in Action:CreateActionController::UnknownFormat 在 Action:Create 中带有 respond_to js
【发布时间】:2016-10-11 04:27:22
【问题描述】:

我的路线.rb

  post 'home/create'
  get  'home/create'

我的家庭控制器

   def create
       @review_n = Review.create(review_params)
       if @review_n.errors.empty?
         respond_to do |format|
           format.js { render 'create', locals: {review_name: @review_n.review_n, review_body: @review_n.review_body} }
         end
       else
         render 'index'
       end
    end      

我的 create.js.erb

    $(function() {
      $(".wrap-body").append("<div> tmp </div>");
    });

rails 说:HomeController#create 中的 ActionController::UnknownFormat

我想在我的 html.erb 中发送数据而无需重新加载页面。请帮帮我!

更新:

我的 html.rb

      <%= form_tag home_create_path, :method => 'post', :remote => true do %>
            <%= text_area_tag  'review[review_body]', nil  %>
            <%= text_field_tag 'review[review_name]', nil %>
            <%= submit_tag 'send' %>
      <% end %>

【问题讨论】:

  • 你也可以添加日志吗?
  • 你能把你的路由改成post 'home/create' =&gt; 'home#create'吗?为什么需要get 'home/create'
  • 我的错误((在我的 HomeController 中:review_n.review_n 到 review_n.review_name

标签: javascript ruby-on-rails respond-to


【解决方案1】:

您的代码是否遇到了位于respond_to 块之外的render 'index' 调用?

通常您会将所有 render 调用放在 respond_to 块中,因此很明显您的逻辑的所有路径都可以响应所有预期的格式:

def create
  @review_n = Review.create(review_params)

  respond_to do |format|
    if @review_n.errors.empty?
      format.js { render 'create', locals: {review_name: @review_n.review_n, review_body: @review_n.review_body} }
    else
      format.js { render 'index' }
    end
  end
end

这需要create.js.erbindex.js.erb(用于错误情况)。

另外,正如@sahil 建议的那样,您的 routes.rb 不应声明 get 'home/create' - 此操作会修改数据,因此通过 GET 访问它是不安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 2020-01-29
    • 2013-10-11
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2018-08-28
    • 2014-05-21
    相关资源
    最近更新 更多