当前位置: 首页 > 面试题库 >

Ruby on Rails国家/州选择“ Enigma”

越健
2023-03-14
问题内容

我正在尝试实现看似非常简单的东西,并且到目前为止,我一直在反对它。

我希望得到的最终结果是与“国家选择”下拉列表绑定的“国家选择”下拉列表,这样,当选择了给定的国家/地区时,如果知道了状态,则这些状态将显示在选择下拉列表中,如果该国家没有已知的州,然后显示一个文本字段。

我觉得我快到了。此时,该界面实际上将根据人员所在的国家/地区生成该州的列表,除非它拒绝动态更新下拉列表。

我收集国家和州位置的部分视图如下:

# _person_setup.html.erb
         <td>
        <%= f.label :country, 'Select your country' %>*<br />
        <%= f.select :country, Carmen::country_names, {}, 
          {:style => 'width: 200px', 
          :id => 'country_select',
          :onchange => remote_function(
            :url => {:action => 'update_states'},
            :with => "'country='+value")} %>            
      </td><td>
        <p>
        <div id="states_div">
            <%= render :partial => 'states', 
                :object => Carmen::states(
                            Carmen::country_code(
                              @person.country)),
                :locals => {:form => f} %>
       </div>
        </p>            
      </td>

DIV中引用的部分如下:

 # _states.html.erb
<% unless states.nil? or states.empty? %>
    <%= form.label :state, 'Select your state' %>*<br />
    <%= form.select :state, states.collect{|s| [s[0], s[0]]} %>
<% else %>
    <%= form.label :state, 'Please enter state or province' %>*<br />
    <%= form.text_field :state %>
<% end %>

最后,用于动态更新状态列表的控制器代码:

def update_states    
puts "Attempting to update states..."    
q = params[:country]    
states = Carmen::states(Carmen::country_code(q))
puts "Country = #{q}, states = #{states.collect{|s| s[0]}.join(", ")}."
render :update do |page|
    page.replace_html "states_div", 
      :partial => 'states',
      :object => states,
      :locals => {:form => form_for(@person)}
end
puts "OK"
end

现在,将在适当的时候调用此代码并生成适当的状态列表。例如,当用户单击澳大利亚时,“尝试更新州…国家=澳大利亚,州=澳大利亚首都特区,新南威尔士州,北领地,昆士兰州,南澳大利亚州,塔斯马尼亚州,维多利亚州,西澳大利亚州”显示在服务器进程。但是,它不会更新页面,并且不会在最后打印“
OK”。简而言之,失败的线路无疑是

page.replace_html "states_div", 
      :partial => 'states',
      :object => states,
      :locals => {:form => form_for(@person)}

请注意,用

page.replace_html 'states_div', "<b>is it working</b>"

正确地替换了div,但是当然没有任何有用的东西。

有人可以帮我了解这里发生了什么吗?


问题答案:

您似乎在假设@person变量在您的原始操作中仍然可用。可以通过针对当前人员的过滤器进行设置,但您不会在问题中显示出来。

如果确实需要再次查找@person,则必须在我认为的remote_function中传递ID。



 类似资料:
  • 问题内容: 我有一个php页面,我想从国家,州和城市列表中选择一个位置。该页面包含用于用户注册的其他数据(名称,电子邮件等),因此在选择框刷新时,我不想刷新页面或其他任何内容。当前,每个选择框仅加载国家,州或城市的完整列表。我希望将它们链接起来,所以我没有重复的城市名称(不同州或国家/地区的名称相同)。 位置存储在数据库中,并在加载时传递到页面。然后将它们循环并添加到选择框中: 数据库结构非常简单

  • 在浏览了一下网站之后,我已经相当接近了下面所示的代码。div显示正常,但是如果我在美国div或加拿大div中放入一个选择框,它会破坏它。 因此,对于这个显示建议,我只是在这个示例中留下文本,以便有一个工作示例。任何帮助找出为什么它与一个选择框内的美国和加拿大div将非常感谢。

  • 与为共享同一位置的多个用户输入重复的用户位置不同,我计划通过将Locations表中的locationID提供给user表中的每个用户来进行规范化,这样我就不必在user表中重复输入Country、State和City了,这样我就节省了磁盘空间。(美国,CT,Woodhaven) 在几个用户说“12”之后,用户可以输入“USA”、“NY”、“Albany”,并将此条目输入到“Locations”表

  • 除了通过用户点击地球表面的国家来进行切换以外,Giojs还支持使用switchCountry() API来直接切换 被选中的国家 ,开发者可以使用这个API来开发具有交互性的应用。 (您也可以点击在线演示,查看应用该API的示例) 参数:countryCode - 在 ISO 3166 标准中的国家代码 // 切换选中国家到 "US" controller.switchCountry("US");

  • 当被选中的国家改变时被调用。 会向回调函数传递两个参数:被选中的国家和相关国家列表。被选中的国家指的是一个CountryObject对象,这个对象表示新的被选中的国家;相关国家列表是CountryObject对象的列表,这个列表中储存了所有与新的被选中国家相关的国家。 使用方法: // 使用onCountryPicked() API来设置回调函数 controller.onCountryPicke

  • 每个国家都有一个特定的 ISO 3166代码 。 根据输入数据和用户的交互行为,在Gio地球表面的国家可以有以下几种状态: 1. 被选中的国家 当用户点击Gio地球表面某个国家的区域时,这个国家会以“被选中”的状态点亮。此时这个国家被称为"被选中的国家"。 可以通过 configure() API来设置被选中国家的颜色,具体设置方法如下所示: controller.configure({