使用Rails 5。
路径下有一些文件:
ls app/assets/
a.jpg b.jpg c.jpg
现在使用这种方式获取模型下的所有文件名:
assets_path = Rails.root.join('app', 'assets')
assets_files = Dir.entries(assets_path).select { |f| !File.directory? f}
enum image: assets_files
但是,不能在index.html.erb中使用这种方式获取真实文件:
- @products.each do |product|
= product.image
数据库中甚至没有a.jpg
数据。
另一个问题,请在_form.html.erb视图中设置以下选择项:
= f.select :image, Product.images.map {|k, v| [k, k]}
它可以显示在html选择项中
<select name='product[image]' id='product_image'>
<option value='a.jpg'>a.jpg</option>
<option value='b.jpg'>b.jpg</option>
<option value='c.jpg'>c.jpg</option>
</select>
但是保存数据后,选择a.jpg
时在db中找到1。
有什么问题吗?
答案 0 :(得分:1)
从文档中:https://api.rubyonrails.org/classes/ActiveRecord/Enum.html
声明一个枚举属性,其中值映射到数据库中的整数。
因此,如果您传递数组(您要执行的操作),它将存储给定对象的索引而不是值。
您所能做的就是传递一个散列值:
public class FileDownloader
{
private string constring = "myconnectionstring";
public async Task download(string fileName, string directoryName)
{
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(constring);
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("myreference");
string userName = Environment.UserName;
if (await share.ExistsAsync())
{
// Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
// Get a reference to the directory we created previously.
CloudFileDirectory sampleDir = rootDir.GetDirectoryReference(directoryName);
// Ensure that the directory exists.
if (await sampleDir.ExistsAsync())
{
// Get a reference to the file we created previously.
CloudFile file = sampleDir.GetFileReference(fileName);
// Ensure that the file exists.
if (await file.ExistsAsync())
{
await file.DownloadToFileAsync(string.Format("C:/Users/" + userName + "/Downloads/{0}", fileName), FileMode.Create);
}
}
}
}
catch (Exception ex)
{
}
}
}