发布方法无法正常工作

时间:2016-08-20 14:58:38

标签: ruby-on-rails

我有一个Entry模型,其布尔列为published,默认设置为false。我在模型中编写了以下方法:

def self.publish
  self.update(published: true)
end

在我的控制器中我有

def publish
  @entry = Entry.find(params[:id]
  @entry.publish
  redirect_to entries_path
end

(我认为它类似于在模型中调用destroy方法)。最后,在我看来,我有这个:

<%= link_to "Publish", entries_path, method: :publish %>

但是当我点击链接时,请求由create方法处理,并返回以下错误:

ActionController::ParameterMissing in Multiflora::EntriesController#create
param is missing or the value is empty: entry

3 个答案:

答案 0 :(得分:1)

首先,没有名为:publish的HTTP方法应该是:put:patch

其次,您需要将id作为参数传递

<%= link_to "Publish", publish_entry_path(@entry) %>

此外,您还需要添加发布操作的路径

resources :events do
  member do
    put :publish
  end
end

publish方法应该是实例方法

def publish 
  self.update(published: true) 
end

答案 1 :(得分:1)

根据API,link_to中的方法是错误的,因此您必须提及一种有效的Http方法(在您的情况下首选补丁),然后编辑您的route.rb文件以将此补丁请求传输到您的指定的函数如下:

patch'/entries/publish', to: 'entries#publish'

然后更改&#34; entries_path&#34;到&#34; entry_path&#34;

因此链接代码应如下所示:

<%= link_to "Publish", entry_path, method: :patch%>

答案 2 :(得分:0)

感谢所有的答案,我已经弄清楚我的错误是什么,但我稍微考虑一下并决定让它更简单:我只是添加了一个复选框来编辑表单,设置:published entry的属性为true。这是:

<%=form_for(@entry, as: :entry, url: content_entry_path(@entry)) do |f| %>
  # ...
  <p>
    <%= f.label "Publish" %> <br />
    <%= f.hidden_field :published, value: '' %>
    <%= f.check_box :published, checked: true %>
  </p>
<% end %>

无论如何,非常感谢您的回答!那是我缺乏知识,我会记得我做错了什么