如何在Rails 3中向表单的hidden_field_tag传递参数?

4
我将尝试进行消息功能的开发(使用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]。

我无法弄清楚如何将参数传递到表单中的hidden_field_tag中?

感谢您的帮助。

2个回答

3
所以我想要做的是访问用户资料页面,点击发送信息,能够编写信息并自动发送给用户,而无需明确指定“收件人”字段。
问题在于,在<%= 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

我正在使用iPhone,所以回复比较简短。你只需要将用户ID传递到隐藏字段中即可,你可以在这里找到语法:

rails - what exactly does hidden_field and hidden_field_tag do?

编辑:刚刚注意到 - 这个    <%= hidden_field_tag :user_id %>

应该改成这样:    <%= f.hidden_field_tag :user_id %>

尝试像这样将参数传递到create方法中:

User.find(params[:message][:user_id])


你能试一下:value => @user.id吗? - fatfrog
把它放在其他的前面,加上 f。 - fatfrog
糟糕,这仍然不起作用。由于它是一个@messagesform_for表单,因此@user可能为空,因为我没有将其传递到块中。有没有办法做到这一点? - ralphos
那不应该有影响。将其设置为可见文本字段,并确保值正在显示。您能粘贴发布日志吗? - fatfrog
1
好的,抱歉我误解了。在链接中执行此操作:<%= link_to '发送消息',new_message_path(:user_id => @user.id)%> 然后在您的表单中添加 <%= f.hidden_field_tag :user_id, :value => params[:user_id] %> - fatfrog
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接