Ruby on rails 在Rails中通过ajax调用和部分访问值
我想看看是否有更好的方法来迭代每个Ruby on rails 在Rails中通过ajax调用和部分访问值,ruby-on-rails,ruby,ajax,ruby-on-rails-4,Ruby On Rails,Ruby,Ajax,Ruby On Rails 4,我想看看是否有更好的方法来迭代每个技能的文档,赢得我的应用,因为我当前的实现在使用ajax时给我带来了问题 我的模型 class Skill < ActiveRecord::Base has_many :documents end class Document < ActiveRecord::Base belongs_to :skill belongs_to :user end class User < ActiveRecord::Base has_many
技能的文档
,赢得我的应用,因为我当前的实现在使用ajax时给我带来了问题
我的模型
class Skill < ActiveRecord::Base
has_many :documents
end
class Document < ActiveRecord::Base
belongs_to :skill
belongs_to :user
end
class User < ActiveRecord::Base
has_many :documents
end
看法
在文档控制器中创建操作
def create
@document = current_user.documents.new(document_params)
respond_to do |format|
if @document.save
format.html { redirect_to root_path, notice: success_save_msg }
format.js
else
format.html
format.js { render action: 'create.js.erb' }
end
end
结束
我的问题发生在渲染create.js.erb
时(例如,当验证失败时)
您可以看到,我正在传递本地的@documents
,当我调用document\u form
时,它将遍历所有用户文档,而不仅仅是针对特定技能的文档。您的问题是因为您试图使用部分共享的/documents/document\u form
。该分部要求文档变量是数组,而不是单个对象。我们可以在您的视图中看到,您已经使用文档列表初始化了document
,select
方法根据条件返回一个数组
在创建
操作中,您已将@document
初始化为文档对象,因此当您在该部分中使用@document
作为文档
的值时,部分视图将不会呈现预期结果
创建另一个可以处理预期视图的分部,或者重构当前分部以处理文档
变量的不同数据类型
编辑:
所以基本上,在document\u表单
partial中,您正在调用局部变量document
上的each
方法,对吗?您不能在当前用户.documents.new(document\u params)
上调用每个,这是您通过ajax调用分部时文档
变量的值。很抱歉,但是您可以重新表述您的问题吗。似乎你在一个线程下有太多的问题,我对你的真正的问题有点困惑。@发现我已经重新构造了我的问题,希望这现在更有意义,谢谢你也许我没有正确理解你的代码,但我没有找到你在#create action中定义\@documents变量的地方。只有\@文档。也许有任何before_操作可以获取所有用户的文档?此外,您可以在索引操作中重写查询,如下所示:current_user.documents.where('skill_id is not?',nil)@hedgesky抱歉,您是对的,我确实有一个before_操作,可以获取创建操作中调用的所有用户文档,我已经删除了它,所以现在@documents只在public/index
中声明。。我试图实现的是只显示属于该特定技能的用户的文档。这有意义吗?谢谢你的回答,你能举个例子说明我如何处理这个问题吗?我不太清楚你的意思或者更好,但是你能看看吗,因为我做了一些重构。我提供了额外的信息,希望你这次能得到。谢谢你提供的额外信息,但事实证明与此无关。。你介意删除答案吗?我会删除这个问题,因为这对将来的任何人都没有帮助,谢谢你的帮助,谢谢
<% @skills.group_by(&:year_group_name).each do |key, value| %>
<h3><%= key %></h3>
<% value.group_by(&:aspect_name).each do |key_one, value_one| %>
<h4><%= key_one %></h4>
<% value_one.each do |s| %>
<% document = @documents.select { |d| d.skill_id == s.id } %>
<li><%= s.skill_description %>
<%= render partial: 'shared/documents/document_form', locals: { document: document } %>
</li>
<% end %>
<% end %>
<% end %>
<% if document %>
<% document.each do |doc| %>
<%= doc %><!-- renders image if exists for user -->
<% end %>
<%= render template: '/documents/new' %>
<% else %>
<%= render template: '/documents/new' %>
<% end %>
$('.doc_upload').html("<%= j render(partial: 'shared/documents/document_form', locals: { document: @documents }) %>")
def create
@document = current_user.documents.new(document_params)
respond_to do |format|
if @document.save
format.html { redirect_to root_path, notice: success_save_msg }
format.js
else
format.html
format.js { render action: 'create.js.erb' }
end
end