ruby-on-rails - 如何将参数传递给 Rails 3 表单中的 hidden_​​field_tag?

标签 ruby-on-rails params simple-form

我正在尝试使消息传递功能正常工作(使用 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/

相关文章:

ruby-on-rails - 如何将 Rails 3.0 应用程序升级到 Rails 3.1?

ruby-on-rails - 调整嵌套路由的 rspec 路由测试

ruby-on-rails - 在深度嵌套对象模型中处理 nils 的技术

ruby-on-rails - 注册时发生未定义的方法错误

ruby-on-rails - simple_form 是否与回形针一起使用 validates_attachment_presence?

mysql - Mysql 2 的 Rails 错误

ruby-on-rails - 使用Stripe Checkout添加参数

templates - Grails gsp模板。从gsp传递参数并接受其on模板

javascript - 在Rails中提交 Bootstrap 模态表单后,如何显示有错误的模态?

ruby-on-rails - 错误消息应与标签匹配