【问题标题】:How to insert values into SQLite and Sequel?如何将值插入 SQLite 和 Sequel?
【发布时间】:2013-12-28 20:16:01
【问题描述】:

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

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

这是我的erb:

<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 属性/外键(问号所在的位置)。

我想要这个,以便以后可以在相应的帖子中显示每条评论。

您能帮我解决这个问题,并指导我正确的道路吗?

【问题讨论】:

    标签: ruby sqlite sinatra sequel


    【解决方案1】:

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

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

    然后在您的 ruby​​ 中,您可以从 params 获取它

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

    顺便说一句,只是一个建议,你应该为你的属性使用小写、下划线样式(我说的是ContentPost_id)因为它有点像Ruby 方式。大写样式用于类,下划线用于属性

    【讨论】:

    • 谢谢你。现在它完美地工作了。您还可以告诉我,在我插入评论后,如何再次将视图重定向到该帖子?对不起我的风格,我还是 Ruby 的新手,我也在努力改进。
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2012-05-30
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2012-04-28
    相关资源
    最近更新 更多