【问题标题】:Ruby child-parent in formsRuby 子父表单
【发布时间】:2012-12-13 03:14:04
【问题描述】:

这是我一直试图解决的问题,但我还没有找到一种不像彻底破解的方法。我有 2 个对象,Warehouse 和 StateCity。 Warehouse 对象具有指向 StateCity 对象 ( state_city_id ) 的外键。

现在,当用户创建仓库时,我希望他们能够输入州和城市。目前他们可以这样做,我只需检查提交的州和城市参数,然后创建或找到相应的 ActiveRecord 对象。现在,当他们在我的视图中查看 Warehouse 时,我在使用帮助器从 StateCity 对象中提取 State/City(如果存在)和在我的模型上添加一个方法以执行如下所示的相同功能之间摇摆不定

def show_state( warehouse )
  if warehouse.state_city.nil? == false
    return warehouse.state_city.state
  end
  return ""
end

def show_city( warehouse )
  if warehouse.state_city.nil? == false
    return warehouse.state_city.city
  end
  return ""
 end

不幸的是,无论是辅助方法还是用额外的函数来增加模型看起来都不是很自然,因为我必须使用一个来创建对象,另一个来查看对象。

我想知道是否有人对解决 Warehouse-StateCity 问题的更好方法有任何建议。非常感谢任何帮助。

【问题讨论】:

    标签: ruby ruby-on-rails-3 parent-child helper


    【解决方案1】:

    首先你可以像这样写 if 语句:

    return warehouse.state_city.city unless warehouse.state_city.nil?
    

    但我确定这不是您要寻找的答案。

    我假设您总是希望 Warehouse 与 StateCity 相关联。如果是这种情况,那么您的用户总是需要在创建仓库时选择州和城市,并且该逻辑由您的控制器处理并由您的 Warehouse 模型验证。

    如果您的所有验证都是正确的,那么您在 Warehouse 模型的显示操作中需要做的就是从您的仓库中获取 StateCity 对象:

    @state_city = warehouse.state_city
    

    然后在您的视图中访问字段@state_city.state@state_city.city。我不完全确定您是如何创建这些 StateCity 对象的,但这听起来很像您想要做的事情。

    如果您的 state_city 为 nil,您可以根据您想要显示的内容以不同的方式处理它。如果您仍想显示仓库显示视图,则可以在视图中进行检查,如

    <% if @state_city %>
      # Do something with the state city like display the state and city?
    <% end %>
    

    例如,如果您想告诉用户更新州城市,您可以从控制器中通过这样做来处理它

    unless @state_city
      redirect_to "your edit action" and return
    end
    

    它会检查你的 state_city 是否为空,然后它将用户重定向到你想要的任何操作。

    【讨论】:

    • 谢谢!我现在不能尝试这个,但我完全忘记了视图可以访问控制器变量。如果它有效,那么您就是第一个选中标记的人。不过只有一个问题,如果我的 state_city 为 null 怎么办?我如何做到这一点,这样我的观点就不会被那件作品所扼杀(假设他们当时可能不确定 state_city)?我可能不得不单独列出州和城市。
    猜你喜欢
    • 2015-05-14
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多