【问题标题】:Create association in Rails在 Rails 中创建关联
【发布时间】:2013-05-05 18:08:33
【问题描述】:

我有模型项目和模型用户。我在这些中有belongs_and_has_many。但是现在我需要告诉 Rails:这个 specific 用户属于这个 specific 项目。如何在项目控制器中执行此操作,以及如何从项目视图中调用此方法?非常感谢。

在项目的*show.html.erb* 我得到了:

<select id="user_select" name="user_select" class="input-large">
  <% @users.each do |user| %>
    <option><%= user.username %></options>
  <% end %>
</select>
<!-- button to addfriend method here -->

我需要从这里调用方法“addfriend”,参数从选择到与该用户关联的项目:-/

项目控制器中的方法addfiend

def addfriend
      @project = Project.find(params[:id])
      @project.users << User.find(params[:user])
      respond_to do |format|
        format.html { redirect_to project, :notice => 'Added.' }
      end
end

【问题讨论】:

    标签: ruby-on-rails model controller associations


    【解决方案1】:

    这在你的控制器动作中看起来像这样:

    @project = Project.create(:user_id => user_id)
    

    而 user_id 是您的外键(您可能希望从您的视图中传递的东西)。

    此代码将在某些控制器操作中编写,您必须定义一个路由以将 URL 连接到此操作。

    请注意,一旦您调用运行此代码的操作,您就可以从您的视图中访问 @project。

    您可以阅读有关路线here 的信息。 您可以在 rails here 阅读有关 mvc 的信息。 您可以在此处阅读有关关联的信息: http://guides.rubyonrails.org/association_basics.html

    【讨论】:

    • Project.create 是否会创建新项目?我不想创建新的,我只想在项目和用户之间建立关联。
    • project = Project.find(params[:id]) project.users
    【解决方案2】:

    如果在模型项目中,你有has_and_belongs_to_many :users,你的项目对象有一个implicit collection,用户,可以像任何其他集合一样添加到,例如:

    project.users << User.find(:first, :conditions => "name = 'foo'")
    

    【讨论】:

    • 不,不是。 &lt;&lt; 附加到数组,= 替换它。
    • 所以我可以在项目控制器中制作:def methodXX project = Project.find(params[:id]) project.users &lt;&lt; User.find(params[:user]) respond_to do |format| format.html { redirect_to project, :notice =&gt; 'Added.' } end 并在路由中设置此方法路径。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多