gpt4 book ai didi

ruby - Sinatra 和 DataMapper 协会

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:01 26 4
gpt4 key购买 nike

我想用Sinatra和DataMapper做一个博客应用,我的主应用文件是这样的。

%w[rubygems sinatra data_mapper].each{ |r| require r }

DataMapper.setup(:default , ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")

class Post
include DataMapper::Resource

property :id, Serial
property :title, String
property :author, String
property :body, Text

has n, :comments
end

class Comment
include DataMapper::Resource

property :id, Serial
property :post_id, Serial
property :name, String
property :body, Text

belongs_to :post
end

helpers do
def admin?
request.cookies[settings.username] == settings.token
end

def protected!
halt [401, 'Not Authorized'] unless admin?
end
end


post '/comment/create' do
comment = Comment.new(:name => params[:name], :body => params[:body])
if comment.save
status 201
redirect '/post/'+post.id.to_s
else
status 412
redirect '/'
end
end

get '/post/:id' do
@post = Post.get(params[:id])
@comments = Comment.new
erb :post
end

delete '/comment/:id' do
Post.get(params[:id]).Comment.(params[:id]).destroy
redirect '/post/'+post.id.to_s
end

DataMapper.auto_upgrade!

现在,我的问题是如何设置评论的实例变量在展后文件中,创建、删除和显示评论。

欢迎提出任何建议和解决方案。

最佳答案

如果我理解您的问题,那么您已经了解了您所需要的大部分内容。您的 post.erb 文件可能类似于:

<h1><%= @post.title %></h1>
<%= @post.body %>

<% @post.comments.each do |comment| %>
<p><%= comment.name %><br /><%= comment.body %></p>

<form action="/comment/<%= comment.id %>" method="post">
<input type="hidden" name="_method" value="delete" />
<input type="submit" value="Delete comment">
</form>
<% end %>

要创建新评论,只需添加一个 POST 表单,其中包含指向您的/comments/create 路由的正确字段。

我之所以使用带有“删除”按钮的表单,是因为您的“删除‘/comment/:id’”将寻找 HTTP DELETE 方法。不幸的是,浏览器实际上并没有实现它。在 POST 表单中寻找“_method”字段是 Sinatra/Rails/Rack 应用程序解决该问题的方法。然后,在靠近 Sinatra 应用顶部的位置,您必须告诉它使用以下命令查找“_method”字段:

use Rack::MethodOverride

希望这就是您要问的。

关于ruby - Sinatra 和 DataMapper 协会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6544335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com