单击时不呈现模态表单
Modal form not rendering on click
目标
我目前正在尝试通过模式创建一个新商店。
问题
- 我遇到了一个问题,即当我单击按钮时,包含表单的模式没有显示。 ~ 已到达 new.js.erb 文件,因为我能够呈现一条 flash 消息(而不是表单)。~
- 另一个问题是我目前使用的是
<%= simple_form_for (Store.new) do |f|%>
而不是 <%= simple_form_for (@store) do |f|%>
。当我使用后者时,我收到一条错误消息:undefined method `model_name' for nil:NilClass
- 更新 在实施 Chandra 的解决方案后(见下面的答案),当我点击按钮时我的标签在我的浏览器中亮起,因此,我也附上了我的 views/layouts/application .html.erb 文件.
代码
views/stores/index.html.erb
<%= render "partials/show_panel_stores_overview"%>
views/partials/show_panel_stores_overview.html.erb
<%= link_to 'New store', new_store_path, remote: true %>
views/stores/new.js.erb
var form = $("<%= j(render 'form') %>");
var wrapper = $('<div>').attr('id', 'new-store-form').append(form);
$('body').append(wrapper);
views/stores/_form
<%= simple_form_for (Store.new) do |f|%>
<%= f.input :name %>
<%= f.button :submit%>
店长
def new
@store = current_user.store.build
@store.age_tables.build
respond_to do |format|
format.html { redirect_to root_url, alert: 'Page not accessible' }
format.js
end
authorize @store
end
def create
@store = current_user.stores.create(store_params)
authorize @store
if @store.save
redirect_to stores_path
else
render 'new'
end
end
views/layouts.html.erb
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>TODO</title>
<%= csrf_meta_tags %>
<%= action_cable_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all' %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<%= stylesheet_pack_tag 'application', media: 'all' %> <!-- Uncomment if you import CSS in app/javascript/packs/application.js -->
</head>
<body>
<%= yield %>
<%= render 'shared/flashes' %>
<%= javascript_include_tag 'application' %>
<%= javascript_pack_tag 'application' %>
</body>
</html>
上面的代码似乎是正确的
需要在
完成一项修复
views/stores/new.js.erb
var form = $('<%= j(render 'form') %>');
将其替换为
var form = $("<%= j(render 'form') %>");
按照此 link 示例代码来呈现局部,Ajax
https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy
目标
我目前正在尝试通过模式创建一个新商店。
问题
- 我遇到了一个问题,即当我单击按钮时,包含表单的模式没有显示。 ~ 已到达 new.js.erb 文件,因为我能够呈现一条 flash 消息(而不是表单)。~
- 另一个问题是我目前使用的是
<%= simple_form_for (Store.new) do |f|%>
而不是<%= simple_form_for (@store) do |f|%>
。当我使用后者时,我收到一条错误消息:undefined method `model_name' for nil:NilClass
- 更新 在实施 Chandra 的解决方案后(见下面的答案),当我点击按钮时我的标签在我的浏览器中亮起,因此,我也附上了我的 views/layouts/application .html.erb 文件.
代码
views/stores/index.html.erb
<%= render "partials/show_panel_stores_overview"%>
views/partials/show_panel_stores_overview.html.erb
<%= link_to 'New store', new_store_path, remote: true %>
views/stores/new.js.erb
var form = $("<%= j(render 'form') %>");
var wrapper = $('<div>').attr('id', 'new-store-form').append(form);
$('body').append(wrapper);
views/stores/_form
<%= simple_form_for (Store.new) do |f|%>
<%= f.input :name %>
<%= f.button :submit%>
店长
def new
@store = current_user.store.build
@store.age_tables.build
respond_to do |format|
format.html { redirect_to root_url, alert: 'Page not accessible' }
format.js
end
authorize @store
end
def create
@store = current_user.stores.create(store_params)
authorize @store
if @store.save
redirect_to stores_path
else
render 'new'
end
end
views/layouts.html.erb
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>TODO</title>
<%= csrf_meta_tags %>
<%= action_cable_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all' %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<%= stylesheet_pack_tag 'application', media: 'all' %> <!-- Uncomment if you import CSS in app/javascript/packs/application.js -->
</head>
<body>
<%= yield %>
<%= render 'shared/flashes' %>
<%= javascript_include_tag 'application' %>
<%= javascript_pack_tag 'application' %>
</body>
</html>
上面的代码似乎是正确的
需要在
完成一项修复views/stores/new.js.erb
var form = $('<%= j(render 'form') %>');
将其替换为
var form = $("<%= j(render 'form') %>");
按照此 link 示例代码来呈现局部,Ajax
https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy