【问题标题】:Ajax form partials in Rails for multiple ModelsAjax 在 Rails 中为多个模型形成局部
【发布时间】:2010-07-31 03:06:06
【问题描述】:

我有这段 AJAX 代码(取自:http://badpopcorn.com/blog/2008/09/11/rails-observer-field/),它出现在许多视图(主要是 new.html.erb 和 edit.html.erb)中。为了避免代码重复,我假装使用部分:

app/views/cities/_state_city_form.html.erb

<p> State:
  <%= select(:state, :state_name, City.all(:select => 'DISTINCT(state)', :order => :state).collect {|c| [ c.state.titleize, c.state ] }, {:include_blank => true})%>
  <%= observe_field 'state_state_name', :url => { :action => :by_state,
                                                  :controller => :cities },
                                                  :update => 'cities_list',
                                                  :with => "'state='+ $('#state_state_name').val()" %>
</p> City:
  <div id="cities_list">
    <%= select(modelname.to_sym, :city_id, [], {:include_blank => true})%>
  </div>
<p>
</p>

我还有 Ajax 回调内容:

app/views/cities/by_state.html.erb

<%= select(/*PROBLEM_HERE*/, :city_id, @cities.collect {|c| [ c.name, c.id ] }, {:include_blank => true})%>

还有我的城市管理员:

app/controllers/cities_controller.rb

class CitiesController < ApplicationController

  def by_state
    @cities = City.find_all_by_state(params[:state])
    render :layout => false
  end

end

然后我会简单地在需要的地方调用部分:

app/views/user/new.html.erb

...
<%= render :partial => 'cities/state_city_form', :locals => { :modelname => :user } %>
...

app/views/employee/new.html.erb

...
<%= render :partial => 'cities/state_city_form', :locals => { :modelname => :employee } %>
...

在这里我可以将 :user:employee 传递给部分,但是如何将它们传递给 Ajax 回调?

【问题讨论】:

  • 您究竟想重用什么:observe_field 部分、获取城市的方法或“by_state”视图?你能举一个另一个模型用例的例子吗?

标签: ruby-on-rails ajax jquery partials


【解决方案1】:

您可以尝试将模型名称作为字符串传递给部分,并使用 to_sym 将其转换为符号。

希望这会有所帮助。

【讨论】:

  • 我是这么认为的,但是如何将模型名称传递给 ajax 回调? app/views/cities/by_state.html.erb
  • @benoror 你能不能把代码给你 ajax 调用也因为我不明白你想在哪里调用它。
  • 终于想通了,把模型名传入":with" hash
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多