我有一个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
答案 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 %>
无论如何,非常感谢您的回答!那是我缺乏知识,我会记得我做错了什么