所以我对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
希望有所帮助
答案 0 :(得分:0)
我发现了问题。在最初创建协作模型时,我将迁移文件设置错误。
感谢您的所有帮助。