ActionController :: UnknownFormat with response_to js in Action:Create

时间:2016-10-11 04:27:22

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

我的route.rb

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

我的HomeController

   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中的ActionController :: UnknownFormat #create

我希望在没有重新加载页面的情况下在html.erb中发送数据。请帮帮我!

UPD:

我的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 %>

1 个答案:

答案 0 :(得分:0)

您的代码是否达到render 'index'阻止之外的respond_to来电?

通常,您会将所有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访问它是不安全的。