Nano Hash - криптовалюты, майнинг, программирование

Синатра и ассоциация DataMapper

Я хочу создать приложение для блога в 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!

Теперь моя проблема в том, как настроить переменную экземпляра комментариев в файле пост-шоу, чтобы создавать, удалять и отображать комментарии.

Любые предложения и решения будут приветствоваться.

01.07.2011

  • Не могли бы вы дать нам немного больше пояснений о том, что вы хотите, пожалуйста? 22.07.2011
  • По сути, я хочу, чтобы в моем приложении было написано, как оставить комментарий, как в блоге. 23.07.2011
  • Мне кажется, ты его уже получил. Здесь определены отношения "один ко многим" между сообщением и комментарием. Что еще вам нужно? 25.07.2011
  • На самом деле я ищу переменные экземпляра в представлении. Значит, я как-то не могу делать новые комментарии? 26.07.2011

Ответы:


1

Если я понял ваш вопрос, у вас уже есть все необходимое. Ваш файл 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 маршрут.

Причина, по которой у меня есть эта форма с кнопкой «Удалить», заключается в том, что ваш «delete '/ comment /: id'» будет искать метод HTTP DELETE. К сожалению, браузеры на самом деле этого не поддерживают. Поиск поля «_method» в форме POST - это то, как приложения Sinatra / Rails / Rack обходят это. Затем в верхней части вашего приложения Sinatra вы должны указать ему искать это поле «_method» с помощью:

use Rack::MethodOverride

Надеюсь, это то, о чем вы спрашивали.

18.08.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..