首页 \ 问答 \ 在Ruby on Rails中使用多态的替代方案(Alternatives to use polymorphism in Ruby on Rails)

在Ruby on Rails中使用多态的替代方案(Alternatives to use polymorphism in Ruby on Rails)

我目前正在编写一些Intranet Web应用程序,用户可以向管理员提交添加不同资源的请求。 示例请求将是:

  • 安装程序,在这种情况下,用户将选择他想要安装的程序
  • 增加配额,在这种情况下,用户只需输入他需要的磁盘空间量,或者他可以选择预定义数量 - 1GB,10GB等。
  • 创建新的电子邮件别名,在这种情况下,用户将只输入别名。
  • ...

我在考虑只有一个UserRequests模型,引用发送者和两个可选属性,一个是reference_id,它会反映到其他表(例如他希望安装的程序),另一个将用于免费类型字段,如电子邮件别名或配额。

所以我的问题是,根据模型应该包含的请求类型:

  • 参考其他表格
  • 整数数据
  • 字符串数据

根据请求的类型,应该采取给定的操作 - 可能会从rails中添加电子邮件别名,但用户计算机上的应用程序将手动安装。

有没有人有类似的问题? 你认为使用多态这种东西是一个好主意吗? 你对如何在表格中组织数据有任何建议吗?


I'm currently writing some intranet web application where people could submit to admins requests for adding different resources. The example requests would be:

  • installing programs, in this case user will select which program he wants installed
  • increasing quota, in this case user will just enter the amount of disk space he needs or maybe he will select the predefined quantities - 1GB, 10GB etc...
  • create new email alias, in this case user will just type the alias.
  • ...

I was thinking about having just one model UserRequests with the reference to the sender and two optional attributes one would be reference_id that would refefrence to other tables (for example the Program that he wants installed) and another would be used for free type fields like email alias or quota.

So my problem is that based on the type of the request the model should contain either:

  • reference to other table
  • integer data
  • string data

Based on the type of the request the given action should be taken - probably email alias could be added from rails but the application on users computer will be installed by hand.

Does anyone had similar problem? Do you think using polymorphism for this kind of stuff is a good idea? Do you have any suggestions on how to organize data in the tables?


原文:https://stackoverflow.com/questions/926230
更新时间:2023-05-17 19:05

最满意答案

当你动态地向LinearLayout添加视图时,可以指定索引。

将第一个视图的高度设置为

android:layout_height="0dp"
android:layout_weight="1"

XML为第二个视图设置height = wrap_content

然后,当你动态地添加新的视图时,将其height = wrap_content设置height = wrap_content ,并将其添加到像这样的父LinearLayout

 parentLinearLayout.addView(childView, index);     
                 //index = position where you want to insert the new view.

它可能会帮助你。 :)


Its possible to specify index while u dynamically add a view to a LinearLayout.

Set height of the first view as

android:layout_height="0dp"
android:layout_weight="1"

Set height = wrap_content for the second view in XML

Then while u are adding new View dynamically, set its height = wrap_content and add it to the parent LinearLayout like this

 parentLinearLayout.addView(childView, index);     
                 //index = position where you want to insert the new view.

It might help you. :)

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)