在Elixir中,您可以使用<>运算符连接字符串,例如"Hello" <> " " <> "World".
您还可以使用管道运算符|>将函数链接在一起.
我正在尝试编写Elixir代码来格式化在线游戏的货币.
def format_price(price) do
price/10000
|> Float.round(2)
|> to_string
|> <> "g"
end
Run Code Online (Sandbox Code Playgroud)
以上结果导致语法错误.我是否忽略了可以连接字符串的基本功能?我知道我可以自己定义一个,但如果我可以避免它,那似乎在我的代码中创建了不必要的混乱.
我意识到我可以通过简单地将方法链接在一起来完成同样的事情,to_string(Float.round(price/10000, 2)) <> "g"但是这种语法并不像阅读那么好,并且如果我想在以后添加步骤,那么将来扩展该方法会更加困难. .
Elixir是否有方法使用管道运算符连接文本,或者如果没有自己定义方法,这是不可能的?
在向现有模型添加新关联时,我对 Ecto 感到相当困惑。假设我有一些用户可以喜欢帖子的讨论板,我有以下模型:
schema "discussion_items" do
many_to_many :likes, XXX.Tag, join_through: "discussion_items_likes"
timestamps()
end
schema "likes" do
belongs_to :user, XXX.User
timestamps()
end
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个现有的DiscussionItem,我想为此添加一个类似的关联,这是我正在尝试的(简化):
user = Repo.one(User)
discussion_item = Repo.one(from d in DiscussionItem, preload [:likes])
like_changeset = Like.changeset(%Like{})
|> Ecto.Changeset.put_assoc(:user, user)
changeset = Ecto.Changeset.change(discussion_item)
|> Ecto.Changeset.put_assoc(:likes, [like_changeset])
Ecto.update!(changeset)
Run Code Online (Sandbox Code Playgroud)
我发现这将在第一次正确创建 Like 和关联,但之后抱怨我需要一些 id 形式的附加信息:
您正在尝试更改关系:喜欢 XXX.DiscussionItem,但缺少数据
如果您尝试更新现有条目,请确保在数据旁边包含条目主键 (ID)。
如果你有很多孩子的关系,那么更新时至少要给同样的N个孩子。默认情况下,不可能孤立嵌入或关联的记录,尝试这样做会导致此错误消息。
所以这是让我困惑的事情(有一些):
User并Dicussion_item添加一个赞吗?