Rails将表单提交链接到对象
Posted
技术标签:
【中文标题】Rails将表单提交链接到对象【英文标题】:Rails linking form submission to object 【发布时间】:2011-10-30 19:13:41 【问题描述】:在 Rails 项目中,我有两个实体,用户和机构,它们具有多对多关系。
他们的视图是为创建新用户和机构而设置的,但我想要另一个视图来链接两者。 在 Rails 控制台中,我所要做的就是
myuser.institutions << the_institution_i_just_created
控制器可以做一些工作,但我如何处理提交和表单?我想使用一个选择框,以便输入仅限于已经存在的机构。
<select id="institution_selection" name="institution_sel">
<% selections = []
Institution.all.each do |institution|
pair = [institution.name, institution.id]
selections.concat([pair])
end
%>
<%= options_for_select(selections) %>
</select>
所以总结的问题是我如何将此提交映射到一个对象,以便在控制器中我可以将它添加到关系中?
解决办法是:
好的,这就是我想出的解决方案,我确信有更好的方法来解决它,我会继续研究它,但至少我得到了一些接近我的目标的东西
def test
if !session[:user]
redirect_to users_path, notice: "Please login first"
end
if params[:institution]
@user = User.find(session[:user])
@institution = Institution.find(params[:institution][:id])
@user.institutions << @institution
redirect_to @user, notice: "Institution was successfully added "
end
end
为了风景
<%= form_tag("/users/test", :method => "post") do %>
<%= collection_select :institution, :id, Institution.all, :id, :name %>
<%= submit_tag("Search") %>
<% end %>
【问题讨论】:
【参考方案1】:使用collection_select
<% from for @instancevar do |form| %>
<%= form.collection_select :institution_id, Institution.all, :id, :name %>
# Do other stuff....
<% end %>
【讨论】:
这对选择框非常有效!比我的方法简单得多,但是如何将上面的(at)instancevar 链接到我可以在控制器中使用的东西。所以在控制器中我怎样才能访问它 “链接到某物”到底是什么意思? 我已经很接近了,我更改了“问题”,因为在我获得更多声誉之前,我不能发布自己的答案...... 好吧,伙计,这可行,但我建议您阅读 Rails 书籍,因为您正在犯切换到 Rails 的 php 编码器的典型错误。在我看来,“Agile Web Development with Rails”是最好的初学者书籍,之后您应该阅读“The Rails 3 Way”,它涵盖了有关 Rails 的所有问题。 好吧,我最终还是彻底撕掉了它。我为登录做了一个单独的控制器。我现在有两本关于 Rails 开发的书即将出版,但我一定会把这两本书添加到我的收藏中。是的,我是一名 PHP 编码员。以上是关于Rails将表单提交链接到对象的主要内容,如果未能解决你的问题,请参考以下文章
通过 ajax rails 2 向 rails 3 提交表单