(强制我是编码确认的新手)
我用Rails创建了一个简单的博客应用程序,并为我的表单使用了simple_for gem。我正在尝试使用两个提交按钮创建草稿状态。最终目标是让“发布”按钮具有登录或未登录索引页面的所有用户所看到的帖子,并且“另存为草稿”按钮将仅允许登录的用户查看帖子。这是我到目前为止所拥有的。
_form.html.erb:
<div class="actions">
<p><%= f.submit "Publish", :name => "publish" %>
<%= f.submit "Save as Draft", :name => "draft" %></p> </div>
posts_controller.rb :(不确定要放在这里的内容)
def create
@post = current_user.posts.new(params[:post])
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
index.html.erb :(不确定如何指定使用不同值提交的帖子)
<% @posts.reverse_each do |post| %>
<h1 style="font-family: latohairline"><%= link_to post.title, post %></h1>
<p style="margin-top: -20px"><small>Posted by <%= post.user.name %></small></p>
<p><%= post.description.html_safe %></p>
<% if user_signed_in? %>
<div><p><small><%= link_to 'Edit', edit_post_path(post) %> |
<%= link_to 'Delete', post, method: :delete, data: { confirm: 'Are you sure?' } %></small></p></div>
<% else %>
<% end %>
post.rb :(不确定是否需要在模型中更改任何内容,但包括它以防万一)
class Post < ActiveRecord::Base
validates_uniqueness_of :title
def to_param
[id, title.parameterize].join("-")
end
attr_accessible :description, :title, :image
validates :user_id, presence: true
validates :description, presence: true
belongs_to :user
has_attached_file :image
end
任何帮助都会受到赞赏,我一直在谷歌搜索几个小时,但不知道所有正确的搜索条件我最终得到了zilch。谢谢!
答案 0 :(得分:4)
如果您对同一表单使用多个提交按钮,则必须选中params[:commit]
。这将设置为提交按钮的名称,因此在您的控制器中,您可以检查
if params[:commit] == 'draft'
# save as a draft
else
# save as published
end
您是否也对如何将每个帖子归类为草稿感到困惑?我可能只是在你的模型上制作布尔字段,然后根据它制作一些范围:
scope :drafts, -> { where(draft: true) }
scope :published, -> { where(draft: false) }
因此,保存为草稿只意味着您将draft
设置为true。然后,您可以使用Post.drafts
或Post.published
检索任一设置,以便在适当的时候显示它们。
答案 1 :(得分:2)
草稿逻辑最终会变得非常复杂,特别是如果您想在最初发布后跟踪草稿更新。 (假设我发布了一条记录,然后开始编辑它,我不想发布它。)
如果您想尝试一下,我已经开始将草稿逻辑提取到名为Draftsman的Ruby gem中。
我总是乐于回答问题或收到有关如何改善问题的建议的反馈。草稿是我项目的重要组成部分,所以我希望这个API很好!