Rails controller 语句不理解

@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