我正在尝试使消息传递功能正常工作(使用 acts-as-messageable gem),并且我希望用户无需输入“:to”字段即可发送消息。
在我的/users/show.html.erb 我有:
<%= link_to 'Send a message', new_message_path %>
在我的/messages/new.html.erb 中:
<%= simple_form_for @message, :url => messages_path, :method => :post do |f| %>
<%= hidden_field_tag :user_id %>
<%= f.input :body %>
<%= f.submit %>
<% end %>
还有我的消息 Controller :
def new
@message = ActsAsMessageAble::Message.new
end
def create
@to = User.find(params[:user_id])
current_user.send_message(@to, params[:body])
end
在我提交表单的那一刻,Rails 显然找不到 id= nothing 的用户,因为没有 param[:user_id] 存在。
我不知道如何将参数传递到表单中的 hidden_field_tag 中?
感谢你的帮助。
最佳答案
所以我想要做的是访问用户个人资料,单击发送消息,然后能够编写消息并让它自动发送给用户,而无需明确规定 :to 字段。
问题是:user_id in <%= hidden_tag_field :user_id %>
没有被设置。换句话说,在这种形式下,我无法从参数中获取 :user_id 。
我们尝试的一些解决方案是将参数包含在 link_to 中,但这与将对象视为 nil 的表单并不相符。
我最终做的是创建一个嵌套资源,如下所示:
resources :users do
resources :messages do
end
end
这最终给了我 url: users/:id/messages/new (
new_user_message_path
)我的 Controller 最终看起来像这样:
def new
@message = ActsAsMessageable::Message.new
@user = params[:user_id]
end
def create
@to = User.find params[:id]
if current_user.send_message(@to, params[:acts_as_messageable_message][:body]
flash[:notice] = "Success"
else
flash[:error] = "Fail"
end
end
在表格中我可以离开
<%= hidden_tag_field :user_id %>
照原样。但基本上这解决了查找用户(我正在访问其个人资料)并在我的创建操作中设置 @to 的问题。
关于ruby-on-rails - 如何将参数传递给 Rails 3 表单中的 hidden_field_tag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552413/