has_many:通过打破一些代码

时间:2015-06-25 23:26:20

标签: ruby-on-rails ruby activerecord associations

所以我对RoR相对较新,并且在尝试恢复和运行代码时遇到了一些问题。所以以前我有用户和用户可以创建的wiki。我已经设置好以便用户可以订阅并获得高级状态以使wiki保密。现在我正在制作它,以便高级用户可以将标准用户添加为维基的协作者。我决定通过has_many关联它们:通过关系。

我遇到的问题让我的一些按钮开始出现我不理解的错误。我现在坚持的那个就是显示有一个创建新维基按钮的页面。

当我添加has_many through:relationship

时,这是我得到的错误
procedure TfrmMain.ThreadBeforeRun(Sender: TIdThreadComponent);
begin
  CoInitialize(Nil);
end;

procedure TfrmMain.ThreadAfterRun(Sender: TIdThreadComponent);
begin
  CoUninitialize;
end;

procedure TfrmMain.ThreadRun(Sender: TIdThreadComponent);
var
  Xml: String;
  FMemory: TStringStream;
begin
  // read until a 'CR LF CR LF' sequence is reached...
  Xml := TrimRight(Client.IOHandler.ReadLn(CR+LF+CR+LF, IndyTextEncoding_UTF8));
  // alternatively:
  // Xml := Client.IOHandler.WaitFor(CR+LF+CR+LF, True, False, IndyTextEncoding_UTF8);

  FMemory := TStringStream.Create(Xml, TEncoding.UTF8);
  try
    QInsert.ParamByName('XMLData').LoadFromStream(FMemory, ftBlob);
  finally
    FMemory.Free;
  end;

  QInsert.Execute;
end;

以下是模型:

collaborator.rb

No route matches {:action=>"new", :controller=>"wikis", :format=>nil, :user_id=>nil} missing required keys: [:user_id]

user.rb

class Collaborator < ActiveRecord::Base
  belongs_to :wiki
  belongs_to :user
end

wiki.rb

class User < ActiveRecord::Base

  ...

  has_many :collaborators
  has_many :wikis, :through => :collaborators

end

wiki_controller.rb的重要部分

class Wiki < ActiveRecord::Base

  belongs_to :user

  has_many :collaborators
  has_many :users, :through => :collaborators

end

最后是按钮所在的show.html.erb文件。

def new
  @user = User.find(params[:user_id])
  @wiki = Wiki.new
  authorize @wiki
end

def create
  @user = current_user
  @wiki = @user.wikis.create(wiki_params)
  authorize @wiki
  if @wiki.save
    flash[:notice] = "Wiki was saved"
    redirect_to @wiki
  else
    flash[:error] = "There was an error saving the Wiki. Please try again"
    render :new
  end
end

如果我遗漏了任何文件或相关信息,请告知我们。这可能是一个简单的愚蠢答案,但我被困在我的生活中。

提前致谢。

编辑:

以下是请求的添加信息,首先是users_controllers.rb中的显示信息

<div class="center-align">
  <%= link_to "New Wiki", new_user_wiki_path(@user, @wiki), class: 'btn grey darken-1' %>
</div>

我在user_policy.rb中使用的相应策略范围

def show
  @wikis = policy_scope(Wiki)
end

和route.rb文件

class UserPolicy < ApplicationPolicy

  class Scope
    attr_reader :user, :scope

    def initialize(user, scope)
      @user = user
      @scope = scope
    end

    def resolve
      wikis = []
      all_wikis = scope.all
      all_wikis.each do |wiki|
        if wiki.user == user || wiki.users.include?(user)
          wikis << wiki
        end
      end
    end
    wikis
  end

end

希望有所帮助

1 个答案:

答案 0 :(得分:0)

我发现了问题。在最初创建协作模型时,我将迁移文件设置错误。

感谢您的所有帮助。