@photo = Photo.new(:upload_file => params[:Filedata])
controller 里面这句话怎么理解呢? 括号里面是什么意思呢
[b]问题补充:[/b]
[i]保存上传的文件吧[/i]
这个我知道,我是问
括号里面的这种写法怎么这么怪呢
是赋值语句么?
[b]问题补充:[/b]
[i]特定的语法嘛,php就是这样的[/i]
恩。。。可以把这个语句拆分开来么?
@photo = Photo.new(:upload_file => params[:Filedata])
也可以
@photo = Photo.new
@photo.upload_file = params[:Filedata]
但是如果你model 层有set方法的话,就不能分开了
就必须在初始化的时候值
顺便也给你说一下model 的set 方法
def uploaded_picture=(picture_field)
if picture_field !=''&& picture_field !=nil
self.length = picture_field.length/1024
if self.length <500
#self.data = picture_field.read
self.name = base_part_of(picture_field.original_filename)
self.content_type = picture_field.content_type.chomp
if !File.exist?("#{RAILS_ROOT}/public/upload")
FileUtils.makedirs("#{RAILS_ROOT}/public/upload")
end
File.open("#{RAILS_ROOT}/public/upload/#{self.name}", "wb") do |f|
f.write(picture_field.read)
end
end
end
end
保存上传的文件吧
特定的语法嘛,php就是这样的
建议把ruby基础先打牢。解释一下吧:
:upload_file => params[:Filedata]
这其实是个hash,键是:upload_file,值是params[:Filedata]。
这个params是rails中的http请求参数。params本身又是个hash,params[:Filedata]是取params中键为:Filedata的值。
ruby的语法中,如果参数只有一个,并且这个参数是hash,那么它的{}可以省略。
Photo.new(:upload_file => params[:Filedata])
可以写成
Photo.new({:upload_file => params[:Filedata]})
假设http请求中有个参数,它的键是:Filedata,值是"value",那么params[:Filedata]取到的到就是"value"这个值。
这时候
:upload_file => params[:Filedata]
就相当于
:upload_file => "value"
纠正一下
[quote]ruby的语法中,如果参数只有一个,并且这个参数是hash,那么它的{}可以省略。[/quote]
这里我说错了。当方法的第1个参数是个hash时,不能用{}来表示hash,否则ruby无法判断它是个block还是个hash。
[code="ruby"]def my_method(a_hash)
puts a_hash[:a_key]
end
#如果有上面这个方法,你可以这样调用:
my_method :a_key => "the value" #这就是你给的例子的调用方式
#也可以这样调用
my_method Hash[:a_key => "the value"]
[/code]
前面说的有些问题
是如果最后一个参数是hash可以省略{}
并且这样做的好处是无需记住参数的位置
upload_file = params[:Filedata]
一个简单的赋值语句e