如何在 Rails 4 中使用 AJAX 和 jQuery 创建操作,当使用嵌套属性时?
How to make create action work with AJAX and jQuery in Rails 4, when using nested attributes?
我正在尝试学习如何在 Rails 中使用 AJAX 和 jQuery 4. 我正在使用嵌套属性,目前正在尝试通过 AJAX.
这是我的项目index.html.erb视图:
<% @projects.each do |project| %>
...
<%= render "idea" %>
<%= form_for([project, project.ideas.build], remote: true) do |f| %>
<p><%= f.text_area :description %></p>
<p><%= button_tag '', :class => 'glyphicon glyphicon-ok' %></p>
<% end %>
<% end %>
_idea.html.erb部分:
<ul class="post">
<% project.ideas.each do |idea| %>
<li><%= idea.description %></li>
<% end %>
</ul>
ideas_controller.rb
def create
@idea = @project.ideas.new(idea_params)
respond_to do |format|
if @idea.save
format.html {redirect_to root_path}
format.js
else
render.html {render :new}
render.js
end
end
end
Routes.rb
resources :projects do
resources :ideas
end
这是我的Create.js.erb。
$('.post').append("<%= j render("idea") %>")
$(":input:not(input[type=submit])").val("");
使用此设置,我在 Projects#index,"undefined local variable or method 'project'" 中遇到了 NameError。
但是,如果我将部分更改为 <%= @project.ideas.each ... 我在 Projects#index.
中收到 "undefined method 'ideas'" 错误
我的projects_controller.rb索引是:
def index
@projects = Project.all
end
我对如何正确渲染 'idea' 部分感到困惑?
您得到的错误是因为您根本没有定义 @project
,而 project
仅在索引视图的 @projects.each
块内定义。您可以将 project
变量作为局部变量传递给 idea 部分,如下所示:
<%= render partial: "idea", locals: {project: project} %>
但更好的是,您可以将想法呈现为集合,如下所示:
在索引视图中:
<ul class="post">
<%= render partial: "idea", collection: project.ideas %>
</ul>
现在我们有了 'project' 变量,因为我们在 @projects.each 块中。
并在想法部分:
<li><%= idea.description %></li>
我正在尝试学习如何在 Rails 中使用 AJAX 和 jQuery 4. 我正在使用嵌套属性,目前正在尝试通过 AJAX.
这是我的项目index.html.erb视图:
<% @projects.each do |project| %>
...
<%= render "idea" %>
<%= form_for([project, project.ideas.build], remote: true) do |f| %>
<p><%= f.text_area :description %></p>
<p><%= button_tag '', :class => 'glyphicon glyphicon-ok' %></p>
<% end %>
<% end %>
_idea.html.erb部分:
<ul class="post">
<% project.ideas.each do |idea| %>
<li><%= idea.description %></li>
<% end %>
</ul>
ideas_controller.rb
def create
@idea = @project.ideas.new(idea_params)
respond_to do |format|
if @idea.save
format.html {redirect_to root_path}
format.js
else
render.html {render :new}
render.js
end
end
end
Routes.rb
resources :projects do
resources :ideas
end
这是我的Create.js.erb。
$('.post').append("<%= j render("idea") %>")
$(":input:not(input[type=submit])").val("");
使用此设置,我在 Projects#index,"undefined local variable or method 'project'" 中遇到了 NameError。 但是,如果我将部分更改为 <%= @project.ideas.each ... 我在 Projects#index.
中收到 "undefined method 'ideas'" 错误我的projects_controller.rb索引是:
def index
@projects = Project.all
end
我对如何正确渲染 'idea' 部分感到困惑?
您得到的错误是因为您根本没有定义 @project
,而 project
仅在索引视图的 @projects.each
块内定义。您可以将 project
变量作为局部变量传递给 idea 部分,如下所示:
<%= render partial: "idea", locals: {project: project} %>
但更好的是,您可以将想法呈现为集合,如下所示:
在索引视图中:
<ul class="post">
<%= render partial: "idea", collection: project.ideas %>
</ul>
现在我们有了 'project' 变量,因为我们在 @projects.each 块中。
并在想法部分:
<li><%= idea.description %></li>