我正在渲染模型中包含表单的部分。好吧,这可能不是最明显的事情,但仍然:这就是我正在尝试的。
理由:
让我首先说明我为什么这样做(如果您有其他方式的建议,请随意):
我正在为我的应用程序的用户构建一个简单的消息传递功能,以便当他们需要执行某个操作时,他们会通过消息得到通知,并且该消息包含要执行的数据和操作。
一个例子:用户正在收到加入给定组的邀请。邀请包含群组所有者的姓名、群组的名称和两个用于接受或忽略邀请的按钮。
编码:
这是消息模型:
class Message < ActiveRecord::Base
def self.group_invitation(group, user)
@m=Message.new({
:status => :unread,
:from_user_id => group.owner.id,
:to_user_id => user.id,
:type => :group_invitation,
:title => "Invitation to the group: #{group.name}.",
:message => ActionController::Base.new.send(:render_to_string,
:partial => 'messages/group_invitation',
:locals => {:group => group,
:user => user}
)
})
@m.save!
end
end
这是我在模型中渲染的部分内容(即'messages/group_invitation'):
<div>
<h1> Invitation to <%= group.name %> </h1>
<p>
Hello <%= user.name %>,
</p>
<p>
You have been invited by <%= group.owner.name %> to join the group
<%= group.name %>.
</p>
</div>
<div>
Please take one of the following action:
<br/>
<%= m= group.memberships.find_by_user_id(user.id)
m.status = :validated
render 'memberships/form', :membership => m, :method =>
:put, :label => "Accept" %>
<br/>
<%= render 'memberships/form', :membership => m, :method =>
:delete, :label => "Ignore" %>
</div>
其中“成员资格/表格”部分是:
<%= form_for membership, :html => {:method => method} do |f| %>
<%= f.hidden_field :group_id %>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :status %>
<%= f.submit :value => label %>
<% end %>
用户拥有在发送邀请时创建的组的成员资格,该组的状态为“已邀请”。用户将收到一条内部消息,其中包含将成员资格更新为“已验证”状态的能力。
如果没有表格,则可以正确生成邀请,但使用表格时,我在“会员资格/表格”部分的第一行收到以下错误:
undefined method `host_with_port' for nil:NilClass
我假设我必须在某处包含/要求 urlherlpers 的定义,以便渲染生成正确的路径等。但我这样做的尝试并没有取得任何成功。
所以如果有一些聪明的人在看它,他可能会很友善地给我一些解决这个问题的想法。
非常感谢期待