options_from_collection_for_select方法的实现

时间:2015-06-02 05:53:35

标签: ruby-on-rails

在使用rails中的select标记时,我在理解options_from_collection_for_select方法时遇到了麻烦。根据我的理解,这个帮助器需要一组任意对象和两个额外的参数:分别从中读取选项值和文本的方法的名称:

<%= options_from_collection_for_select(Product.all, :id, :name) %>

这是帮助理解帮助程序的好例子,仅在idname字段属于Product时才有效。假设,在我的情况下,我希望product.category.name显示为文本,那么我该如何实现呢。

同样,productcategory模型具有one-to-one关联。

为了实现我的目标,我尝试了以下但我认为,这种关联违反了规则。

<%= options_from_collection_for_select(Product.all, :id, Product.category_name) %>

那么,有人可以提出更好的解决方案吗?

4 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用模型方法。

product.rb

 public static void DisposeImage(BitmapImage image)
{
    Uri uri= new Uri("oneXone.png", UriKind.Relative);
    StreamResourceInfo sr=Application.GetResourceStream(uri);
    try
    {
        using (Stream stream=sr.Stream)
        {
            image.DecodePixelWidth=1; //This is essential!
            image.SetSource(stream);
        }
    }
    catch { }
}

您可以在options_from_collection_for_select中将其称为

def get_category_name
  self.category.name
end

首先,它会检查产品表中是否存在任何列,然后检查方法。

答案 1 :(得分:0)

您可以在Product modal中使用category_name创建实例方法。

def category_name
  self.category.name
end

然后,在视图中使用此帮助程序。

<%= options_from_collection_for_select(Product.all, :id, :category_name) %>

答案 2 :(得分:0)

在产品型号中:

echo date("Y-m-d H:i:s");//current date

echo date("H:i:s");//current time

并且在视野中:

def category_name
  self.category.name
end

答案 3 :(得分:0)

您需要在SetTimer()模型中使用category_name的getter方法:

Product

在您看来,您只需致电def category_name self.category.name end

:category_name

希望这会有所帮助