我有这样的事情:
module MyModule
define_method(:foo){ puts "yeah!" }
end
class User
include MyModule
end
Run Code Online (Sandbox Code Playgroud)
但这不符合预期......它们没有定义.此外,我需要使用模块,因为我想区分方法和普通的用户方法.我喜欢这个:
MyModule.instance_methods
Run Code Online (Sandbox Code Playgroud)
请帮忙..我错过了什么?我也尝试过:
module MyModule
(class << self; self; end).class_eval do
define_method(:foo){ puts "yeah!" }
end
end
Run Code Online (Sandbox Code Playgroud)
这也行不通:/
澄清...我想用:
User.first.foo
Run Code Online (Sandbox Code Playgroud)
不
MyModule.foo
Run Code Online (Sandbox Code Playgroud) 我有以下两个模型:
schema "users" do
field :email, :string
field :crypted_password, :string
field :password, :string, virtual: true
has_many :exercise_entries, ExerciseEntry
timestamps
end
Run Code Online (Sandbox Code Playgroud)
和:
schema "exercise_entries" do
field :date, Ecto.DateTime
field :exercise, :string
field :category, :string
field :weight, :float
field :reps, :integer
belongs_to :user, User
timestamps
end
Run Code Online (Sandbox Code Playgroud)
我在 iex 中运行了以下代码:
u = Repo.get(User, 1)
iex(8)> u.exercise_entries
#Ecto.Association.NotLoaded<association :exercise_entries is not loaded>
Run Code Online (Sandbox Code Playgroud)
我知道我可以做Repo.get(User,1) |> Repo.preload([:exercise_entries]),然后我可以访问锻炼条目。是否有可能以某种方式加载运动条目而不先预加载它们?
阶段
图像库应用程序.我有两个型号Handcraft和Photos.
一个手工艺品可能有很多照片,假设我有这样的模型:
Handcraft(name:string)Photo(filename:string, description:string, ...)在_form.html.erb手工艺品中,有:
<%= form_for @handcraft, html: {multipart: true} do |f| %>
# ... other model fields
<div class="field">
<%= f.label :photo %><br />
<%= f.file_field :photo %>
</div>
# ... submit button
<% end %>
Run Code Online (Sandbox Code Playgroud)
handcraft.rb 看起来像这样:
class Handcraft < ActiveRecord::Base
attr_accessible :photo
has_many :photos
mount_uploader :photo, PhotoUploader
# ...
end
Run Code Online (Sandbox Code Playgroud)
photo_uploader.rb:
class PhotoUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :thumb …Run Code Online (Sandbox Code Playgroud) 当我试图理解可变变量(恰好是引用)let mut x: &i32与可变引用(例如)之间的差异时let x: &mut i32,我发现了我无法理解的差异:
这有效,其中by_ref有签名fn by_ref(&mut self) -> &mut Self:(文档)
fn example(mut t: &TcpStream) {
t.by_ref();
}
Run Code Online (Sandbox Code Playgroud)
但下面的String,使用具有类似签名的方法reserve:
pub fn reserve(&mut self, additional: usize)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,错误是:
“不能借用
*str可变的,因为它位于&引用后面”
pub fn reserve(&mut self, additional: usize)
Run Code Online (Sandbox Code Playgroud)
有趣的是,这两个具有可变引用的示例有效,并且据我所知,是使用可变方法的推荐方法:
fn example(mut str: &String) {
str.reserve(10);
}
Run Code Online (Sandbox Code Playgroud)
TcpStream那么 a和 a之间有什么不同String,允许&mut self在一种情况下调用带有参数的方法,而在另一种情况下则不允许呢?
表works(emNo, comNo, salary).
". Suppose it gives me a column with 5 rows. How do I count "对于每一行,我可以使用"从作品emNo`中选择不同的comNo"获得不同的comNo 吗?
有没有办法看到函数的守卫而没有看到源代码?
给出一个示例函数(在Elixir中):
def divide(x, y) when y != 0 do
x / y
end
Run Code Online (Sandbox Code Playgroud)
怎么会弄清楚在没有访问源代码的情况下有一个分区/ 2的守卫,以及如何找到关于该守卫的信息或者后卫对模式匹配的预期?
我正在观看来自Ruby Conf 2014的Chris McCord(Elixir凤凰框架的创建者)的演讲.在演讲中,克里斯正在描述警卫,并且有人问是否有办法检查可以显示该功能的警卫的功能.
这是谈话的问题:
https://www.youtube.com/watch?v=5kYmOyJjGDM&t=5188
视频t =时间后不久就会问这个问题.
新手铁路问题即将来临.
我有一个这样的课:
class Thing < ActiveRecord::Base
attr_accessible :name
attr_accessor :name
validates_uniqueness_of :name, :case_sensitive => false
end
Run Code Online (Sandbox Code Playgroud)
我已完成迁移,表格看起来还不错.然后我启动rails console并尝试以下操作:
t = Thing.new(:name => "test")
=> #<Thing id: nil, name: nil, description: nil, created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)
已经在这里它说名字是零,为什么?继续,我试试这个:
t.name
=> "test"
Run Code Online (Sandbox Code Playgroud)
现在名字似乎设定了吗?如果我试图保存:
t.save!
Thing Exists (8.0ms) SELECT 1 AS one FROM "things" WHERE LOWER("things"."name") = LOWER('test') LIMIT 1
SQL (16.0ms) INSERT INTO "things" ("created_at", "description", "name", "updated_at") VALUES ('2012-10-28 16:10:12.701000', NULL, NULL, '2012-10-28 16:10:12.701000')
=> true
Run Code Online (Sandbox Code Playgroud)
为什么我指定的名称没有保存?我想要的是能够在调用new时将属性指定为哈希,然后保存实例.