我的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 %>
答案 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.erb
和index.js.erb
(针对错误情况)。
此外,正如@sahil建议的那样,您的routes.rb不应声明get 'home/create'
- 此操作会修改数据,因此通过GET
访问它是不安全的。