[英]Ruby on Rails 3: Toggle Boolean with Forms
用戶可以在我的Ruby應用程序上互相發送消息。 下表如下:
t.string "content"
t.integer "from_id"
t.integer "reply_to_id"
t.boolean "read", :default => false
我最近添加了布爾值:read,並且我將表單鏈接到其收件箱中的郵件。 當他們單擊“標記為已讀”(通過表單提供的鏈接)時,我希望它切換:read => true。
我目前無法完成此任務。 這是我當前的設置。
_mark_read.html.erb
<%= form_for(:message, :mark_read => {read: true}) do |f| %>
<div><%= f.hidden_field :read %></div>
<%= f.submit "Mark Read", class: "btn-link" %>
<% end %>
Class MessagesController < ApplicationController
def mark_read
@message = current_user.messages.build
@message.toggle!(:read)
end
config/routes.rb
match '/mark_read' => 'messages#mark_read', :via => :post, :as => :mark_read
當我單擊“標記為已讀”時,這是我的調試信息:
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: ---
message: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
read: 'false'
commit: Mark Read
controller: static_pages
action: connect
我可以看到它甚至沒有使用我的控制器。 我認為設置不正確。
關於如何設置的任何建議,將不勝感激。
信不信由你..我什至不需要模型,也不需要controller:D正如我所說的,它是在分頁集合中呈現的。 此分頁集是在@inbox_items定義的,標識為inbox_item.id。
這是無需任何模型或控制器即可使用的形式。 它只是在config/routes.rb
定義為:
match '/mark_read' => 'messages#mark_read', :via => :post
表格:
<ul class="share-actions" id="mark_read<%= inbox_item.id %>">
<%= form_for :mark_read do |f| %>
<%= f.check_box inbox_item.toggle!(:read) %>
<%= f.submit "Mark Read", class: "btn btn-link" %>
<% end %>
</ul>
嗯,好嗎? :D
如果您感到好奇,請提供更多信息。 呈現的@inbox_items的基本類是類消息。 消息定義了用戶的所有私人帖子。 在User類中,我開始設置@inbox_items的定義方式:
Class User
def inbox
Message.from_users_inbox(self)
end
然后,我構建其余部分:
Class Message
def self.from_users_inbox(user)
"SELECT best_friend_id FROM friendships WHERE new_friend_id = :user_id"
where("user_id = :user_id OR reply_to_id = :user_id", user_id: user.id)
end
MemberpagesController
def inbox
@message = current_user.messages.build
@inbox_items = current_user.inbox.paginate(page: params[:page])
end
feeds/_inbox.html.erb
<% if @inbox_items.any? %>
<%= render: 'feeds/inbox_item', collection: @inbox_items %>
<%= will_paginate @inbox_items %>
<% end %>
最后:
feeds/_inbox_item.html.erb
<div id="<%= inbox_item.user.name %>_<%= inbox_item.id %>">
...
<ul class="share-actions" id="mark_read<%= inbox_item.id %>">
<%= form_for :mark_read do |f| %>
<%= f.check_box inbox_item.toggle!(:read) %>
<%= f.submit "Mark Read", class: "btn btn-link" %>
<% end %>
</ul>
...
做到了! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.