如何在Rails 3中将参数传递给我的表单中的hidden_​​field_tag?

时间:2012-03-04 04:49:39

标签: 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 %>

我的消息控制器:

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]存在。

我无法弄清楚如何将param传递给表单中的hidden_​​field_tag?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

所以我想要做的是访问用户个人资料,点击发送消息,并能够编写消息并让它自动发送给用户,而无需明确规定:to field。

问题是:<%= hidden_tag_field :user_id %>中的user_id未设置。换句话说,我不能从那个形式的params得到:user_id。

我们尝试过的一些解决方案是将params包含在link_to中,但是对于将对象视为nil的形式而言并不合适。

我最终做的是创建一个嵌套资源,如下所示:

resources :users do
   resources :messages do
   end
 end

这最终给了我url:users /:id / messages / new(new_user_message_path

我的控制器最终看起来像这样:

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的问题。

答案 1 :(得分:1)

我在我的iPhone上对于简短回复感到抱歉,您只需要将用户ID传递到隐藏字段,您可以在答案中找到语法:

rails - what exactly does hidden_field and hidden_field_tag do?

编辑:刚注意到 - 这个 &lt;%= hidden_​​field_tag:user_id%&gt;

应该是这样的: &lt;%= f.hidden_​​field_tag:user_id%&gt;

尝试将params传递给create方法,如下所示:

User.find(PARAMS [:消息] [:USER_ID])