0

我的路线.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 %>
4

1 回答 1

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

这需要同时具有 acreate.js.erb和 an index.js.erb(对于错误情况)。

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

于 2016-10-11T08:42:55.100 回答