如何在SQLite和Sequel中插入值?

时间:2013-12-11 02:13:21

标签: ruby sqlite sinatra sequel

我正在尝试在Sinatra博客中为我的帖子实施评论。这是我的评论和帖子数据库:

DB.create_table :Posts do
primary_key :id
String :Title
String :Content
end

DB.create_table :Comments do 
primary_key :id
String :Content
foreign_key(:Post_id, :Posts)
end

这是模型:

class Post < Sequel::Model
one_to_many :Comments
end

class Comment < Sequel::Model
many_to_one :Posts
end

这是我的问题:

<form action="/comments" method="post">
<div class="form-group">
<label for="Content">Comment:</label>
<br>
<textarea id="Content" class="form-control" name="Content" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-success">Submit</button>
</form>

这是我的控制器代码:

post "/comments" do
@comment = Comment.insert(:Content => params[:Content], :Post_id => ???? )
end

我想将特定注释的帖子的id插入到:Post_id属性/外键(问号所在的位置)。

我想要这样,以后我可以将每条评论显示到相应的帖子。

你能帮我解决这个问题,并指引我走正确的道路吗?

1 个答案:

答案 0 :(得分:0)

通常我会将表单中的帖子ID作为隐藏字段插入。好吧,假设您在帖子页面上呈现评论表单

<form action="/comments" method="post">
  ...
  <input type="hidden" name="post_id" value="<%= @post.id %>" />
</form>

然后在你的红宝石中你可以从params

抓住它
@comment = Comment.insert(:Content => params[:Content], :Post_id => params[:post_id]

顺便说一句,只是建议的一句话,你应该使用你的属性的低位情况,强调的风格(我说的是ContentPost_id)因为它有点像Ruby的方式。大写样式用于属性

的类和下划线