我正在渲染部分包含模型中的表单。 好吧,这可能不是最明显的事情,但仍然是:这就是我正在尝试的。
让我首先激励我为什么这样做(如果你有其他方式的建议,请随意):
我正在为我的应用程序的用户构建一个简单的消息传递功能,以便当他们需要执行操作时,会通过消息通知他们,并且消息包含数据和要执行的操作。
示例:用户正在接收加入特定组的邀请。邀请包含组所有者的名称,组的名称以及接受或忽略邀请的两个按钮。
以下是消息模型:
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>
其中'membership /表'部分为:
<%= 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 %>
用户拥有在以“邀请”状态发送邀请时创建的群组的成员资格。用户将收到一条内部消息,其中包含将成员资格更新为“已验证”状态的功能。
如果没有正确生成邀请,但是使用表单,我会在'membership /表'部分的第一行出现以下错误:
undefined method `host_with_port' for nil:NilClass
我假设我必须在某处包含/要求urlherlpers的定义,以便渲染产生正确的路径等。但我这样做的尝试并没有取得任何成功。
所以,如果有一个聪明的家伙看着它,可能他会非常友好地给我一些想法来解决这个问题。
非常感谢期待